2012-02-25 136 views
5

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

现在,我向左滚动时发生的问题。我所做的是将图像移动到内容大小的末尾(因此,将600添加到每个图像视图的origin.x),然后相应地设置内容偏移量。当手指在屏幕上并且用户拖动时(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,现在一切都很好。

但是,我现在想放大滚动视图,但viewForZoomingInScrollView永远不会被调用。放大内容大小的滚动视图无法放大吗?

+0

有人请吗? :) – 2012-02-25 13:33:54

回答

5

这里有一些方法漂浮。只要使用网站搜索...

如果你想要一个更“正式”的例子由Apple创建看看StreetScroller Demo。有关此示例的更多信息,请参阅WWDC去年的会议编号。 104 高级滚动视图技术

还有Github上的UIScrollView的子类,称为BAGPagingScrollView,作为寻呼&无限的,但它必须解决你自己的一些错误,因为它不是正在积极开发(尤其是goToPage:方法导致的问题) 。

+0

谢谢:)我看了一下StreetScroller,它使用recenterIfNecessary方法完美地工作。 – 2012-02-25 15:48:12

+0

很高兴到这里! – dom 2012-02-25 15:51:59

+0

谢谢:)我想放大我的滚动视图,但viewForZoomingInScrollView永远不会被调用。我有userInteractionEnabled设置为YES。 – 2012-02-25 16:18:51