2010-07-13 63 views
3

我已查看UIScrollView. Any thoughts on implementing "infinite" scroll/zoom?,但它並未完全解決我的問題。不過,我很困惑,因爲我猜想其他人沒有看到我的問題,所以也許它與我的代碼的細節有關。由Allisone提供的示例代碼與我的類似,儘管我使用scrollViewDidScroll來監視contentOffset而不是自定義的KVO方法。UIScrollView contentOffset的更改在減速時不會粘住

當我的UIScrollView減速時,如果我在UIScrollView的邊界左側插入一個子視圖,並通過插入的子視圖的寬度增加contentOffset,我將忽略對contentOffset的更改;內容按插入的子視圖的寬度「跳轉」,並且contentOffset值流在後續的scrollViewDidScroll調用中繼續其當前軌跡。雖然簡單地跟蹤,但沒有問題。我有可能做錯了嗎?就好像界限或contentOffset對於減速事件是粘性的。

使用案例:UIScrollView具有非常大的虛擬內容,可以動態分頁和分頁,並且當用戶平滑地滾動UIScrollView中的內容(例如向左)時,應該在遠處插入額外的內容而不會中斷當前正在進行的平滑滾動。正如我所說,如果減速被禁用,或者我依靠拖動而不是輕彈,這可以正常工作。

起初我希望問題是由於將標註內的UIScrollView的內容更改爲scrollViewDidScroll引起的,因此我通過延遲performSelector進行了雙重檢查,但問題依然存在。

感謝, 凱文

+0

你有沒有找到這個解決方案? – 2011-05-23 02:36:35

回答

1

即使你腦子裏想的不完全是,但使用setContentOffset:動畫將有希望的結果(修改內容向右偏移座標),儘管這將是動畫。

+0

只需設置動畫:否,並且不會有任何動畫。 – 2012-09-02 23:17:24

1

面對同樣的問題。看起來像奇怪的UIScrollView錯誤。我將其固定在來自Apple的StreetScroller示例的基礎上。 InfiniteScrollView從UIScrollView繼承,並且在那裏工作良好。

 
tScrollView : UIScrollView 

In tScrollView.m: 

- (void)recenterIfNecessary { 
    if (_tDelegate && [_tDelegate respondsToSelector:@selector(offsetForRecenterScrollView:)]) 
     self.contentOffset = [_tDelegate offsetForRecenterScrollView:self]; 
} 
- (void)layoutSubviews { 
    [super layoutSubviews]; 
    [self recenterIfNecessary]; 
}

在委託實施offsetForRecenterScrollView:,並返回新CGPoint在scrollView.contentOffset設置:但是,如果你想創建一個使用UIScrollView的內部本身的自定義類,你可以當它需要回到中心這樣的內容繼承本的UIScrollView和呼叫代理。