2010-09-16 78 views
4

我有一個分頁UIScrollView,通過多個全屏幕圖像的頁面。基於Apple示例代碼,我平鋪頁面,動態排列和排列UIViews作爲滾動視圖頁面通過圖像集合。UIScrollView和scrollRectToVisible:動畫:

我有一個工具欄按鈕調用scrollRectToVisible:animated:將UIScrollView移動到特定圖像。這是完美的。

問題是,如果你在UIScrollView中做了一次觸摸操作,它會滾動回到它在觸摸按鈕之前顯示的頁面,並且scrollRectToVisible:animated:方法調用滾動視圖。

如果您的觸摸正在移動,UIScrollView會按預期滾動,並且後續觸摸不會導致UIScrollView移回原始頁面。

如何防止此行爲?

感謝

JK

回答

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」示例代碼,其中ha DA 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

+0

謝謝,約瑟夫。這工作完美。我已經在使用frameForPagingScrollView,所以我只需要添加offsetForPageAtIndex方法並放入方法調用中就可以了! – Alpinista 2010-09-16 16:25:33

+0

@JosephH,小心分享一個鏈接到'frameForPagingScrollView'的實現?找不到它。 – 2016-03-20 00:06:36

+0

@lulianonofrei我將代碼和鏈接添加到了我的答案中。 – JosephH 2016-03-20 12:33:19

3

雖然約瑟夫的回答給我發了正確的方式,我有一些奇怪的旋轉設備時的行爲。我發現使用offset.x = (pagingScrollView.bounds.size.width * index);反而效果更好。