无限水平滚动UIScrollView

时间:2012-02-25 01:14:41

标签: objective-c ios5 uiscrollview infinite-scroll

我有一个UIScrollView,其内容大小为1200x480。我有一些图像视图,其宽度加起来600.当向右滚动时,我只是增加内容大小并设置偏移量,以使一切顺利(然后我想添加其他图像,但这并不重要马上)。所以基本上,当前在视口中的图像保留在左侧的某个位置,最终将从超级视图中删除。

现在,当我向左滚动时,我遇到了这个问题。我所做的是将图像移动到内容大小的末尾(因此为每个图像视图的origin.x添加600),然后相应地设置内容偏移。当手指在屏幕上并且用户拖动时(scrollView.isTracking = YES),它可以工作。当用户向左滚动并放开(scrollView.isTracking = NO)时,图像视图最终向右移动太快并且几乎立即消失。有没有人知道我怎么能让图像移动得很好而且即使用户没有手动拖动视图并且已经松开也不会消失?

这是我横向拖动的代码:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint offset = self.scrollView.contentOffset;
    CGSize size = self.scrollView.contentSize;

    CGPoint newXY = CGPointMake(size.width-600, size.height-480);

    // this bit here allows scrolling towards the right
    if (offset.x > size.width - 320) {
        [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)];
        [self.scrollView setContentOffset: offset];
    }

    // and this is where my problem is:
    if (offset.x < 0) {
        for (UIImageView *imageView in self.scrollView.subviews) {
            CGRect frame = imageView.frame;
            [imageView setFrame:CGRectMake
                (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)];
        }
        [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)];
    } 
}

编辑:现在正在运作 - 我看了一下StreetScroller,现在一切都很好。

但是,我现在想要放大scrollview,但是从不调用viewForZoomingInScrollView。是否无法放大内容较大的滚动视图?

1 个答案:

答案 0 :(得分:5)

这里有一些浮动的方法。只需使用网站搜索...

如果您想要Apple创建的更“官方”示例,请查看StreetScroller Demo。有关此示例的更多信息,请查看去年的WWDC会话编号。 104 高级滚动查看技术

在Github上还有一个名为BAGPagingScrollView的UIScrollView子类,它是分页&amp;无限,但它有一些你必须自己解决的错误,因为它没有处于积极的开发状态(尤其是goToPage:方法会导致问题)。