UIScrollView和scrollRectToVisible:动画:

时间:2010-09-16 00:07:42

标签: iphone uiscrollview

我有一个分页UIScrollView,可以浏览多个全屏图像。在基于Apple示例代码的滚动视图页面浏览图像集时,我正在平铺页面,对UIViews进行动态排队和出列。

我有一个工具栏按钮,调用scrollRectToVisible:animated:将UIScrollView移动到特定图像。这非常有效。

问题在于,如果您在UIScrollView中单击一下,它会在触摸按钮之前滚动回显示的页面,并且scrollRectToVisible:animated:方法调用滚动视图。

如果您的触控移动,UIScrollView会按预期滚动,后续触摸不会导致UIScrollView移回原始页面。

如何防止此行为?

由于

JK

2 个答案:

答案 0 :(得分:12)

您需要使用内容偏移而不是scrollRectToVisible,例如:

[pagingScrollView setContentOffset:[self offsetForPageAtIndex:page] animated:YES];                                                                

其中offsetForPageAtIndex如下所示:

- (CGPoint)offsetForPageAtIndex:(NSUInteger)index {                                                                                                        
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView];                                                                                        

    CGPoint offset;                                                                                                                                        

    offset.x = (pagingScrollViewFrame.size.width * index);                                                                                                 
    offset.y = 0;                                                                                                                                          
    return offset;                                                                                                                                         
}                                                                                                                                       

这是基于WWDC 2010的Apple“photoscroller”示例代码,它具有如下所示的frameForPagingScrollView:

- (CGRect)frameForPagingScrollView {
    CGRect frame = [[UIScreen mainScreen] bounds];
    frame.origin.x -= PADDING;
    frame.size.width += (2 * PADDING);
    return frame;
}

该版本的Photoscroller示例代码的完整副本位于:

https://github.com/jogu/WWDC-2010/tree/master/PhotoScroller

答案 1 :(得分:3)

虽然约瑟夫的答案以正确的方式告诉我,但旋转设备时我有一些奇怪的行为。我发现使用offset.x = (pagingScrollView.bounds.size.width * index);代替效果更好。

相关问题