2012-04-17 13 views
0

編輯:我得到了一些進步,所以我已經簡化和縮小的問題: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:,以便重複使用與平常一樣平行於動畫。但它不起作用 - 沒有任何東西被重用,並且動畫之後的滾動視圖的內容與之前的動畫處於相同的狀態 - >以前的可見頁面被移出屏幕。

所以這個問題縮小了如何在動畫過程中移動子視圖並更新其內容?

或者,也許有可能是完全不同的方式做這個...

+1

不知道我理解 - 「這樣的觀點並不動畫過程中搞砸」,然後這個問題:「如何移動子視圖......動畫中」 。爲什麼不調用setContentOffset:animated:?然後scrollViewDidScroll被調用,並且你總是重新定位你的子視圖? – danh 2012-04-17 14:42:34

+0

是的,但我需要自定義動畫。我實際上已經分類爲UIScrollView,並覆蓋setContentOffset:animated :.如果動畫是肯定的,我需要執行Core Animation自定義動畫。問題是,在這個自定義動畫期間,我無法重用子視圖。 – 2012-04-17 14:54:00

+0

在動畫塊中執行setContentOffset:animated時,不會調用viewDidScroll,而是在動畫的開頭和結尾調用其他一些委託方法,這是我不想要的。 – 2012-04-17 15:05:15

回答

1

檢查我的答案here

編輯:笑,只注意到它的同一作者

-1

您可以嘗試改變在梅索德滾動偏移量,那麼你可以從

[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>]; 

叫它然後使其停止時它達到一個具體的價值

相關問題