編輯:我得到了一些進步,所以我已經簡化和縮小的問題:I have created new question, which is more clearer and more understandable I hope有沒有辦法通過重新使用視圖通過UIScrollView上的核心動畫更改內容偏移量?
我有非常大的橫向滾動的UIScrollView,這是重用它的子視圖。當用戶向左滾動時,最右邊的視圖被移動到最左邊的位置並且其內容被更新。類似地,當用戶向右滾動時,最左邊的視圖被移動到最右邊的位置並且其內容被更新。與UITableView類似。這很好地使用scrollviewDidScroll:委託方法。
現在我需要以編程方式更改偏移量,但是使用自定義動畫行爲(慣性並反彈回最終位置)。
要原型此,我用
[UIView animateWithDuration:contentOffsetCADuration
delay:0
options:UIViewAnimationOptionCurveLinear
animations:^{
[self setContentOffsetNoDelegateCalls:contentOffset animated:NO];
}
completion:^(BOOL finish){
dispatch_async(dispatch_get_main_queue(), ^{
[timer invalidate];
});
}];
在那裏我動畫內容與殘疾人代表回調補償,這樣的看法並不動畫過程中搞砸。但我需要一些東西來同時重用和重新定位它們。
我的解決方案是創建計時器並手動調用scrollViewDidScroll:
,以便重複使用與平常一樣平行於動畫。但它不起作用 - 沒有任何東西被重用,並且動畫之後的滾動視圖的內容與之前的動畫處於相同的狀態 - >以前的可見頁面被移出屏幕。
所以這個問題縮小了如何在動畫過程中移動子視圖並更新其內容?
或者,也許有可能是完全不同的方式做這個...
不知道我理解 - 「這樣的觀點並不動畫過程中搞砸」,然後這個問題:「如何移動子視圖......動畫中」 。爲什麼不調用setContentOffset:animated:?然後scrollViewDidScroll被調用,並且你總是重新定位你的子視圖? – danh 2012-04-17 14:42:34
是的,但我需要自定義動畫。我實際上已經分類爲UIScrollView,並覆蓋setContentOffset:animated :.如果動畫是肯定的,我需要執行Core Animation自定義動畫。問題是,在這個自定義動畫期間,我無法重用子視圖。 – 2012-04-17 14:54:00
在動畫塊中執行setContentOffset:animated時,不會調用viewDidScroll,而是在動畫的開頭和結尾調用其他一些委託方法,這是我不想要的。 – 2012-04-17 15:05:15