2013-01-02 113 views
15

我希望Flipboard能夠在應用程序啓動時輕微地翻動動畫。啓動Flipboard時會發生輕微的上下翻轉,以向不熟悉可翻轉的界面的用戶展示。動畫後的iOS UIScrollView動畫

我有一個UIScrollView我想動畫一點,以顯示用戶它是可滾動的。所以我想滾動到右邊一點點,然後回來。 UIScrollView有一個setContentOffset:animated:沒有完成條款的消息。我發現調用它兩次會導致看起來沒有動畫。如果我想連續播放動畫之後要做什麼?編輯: 感謝列維的答案。 併爲了記錄,我可以使用UIViewAnimationOptionAutoreverseUIViewAnimationOptionRepeat。所以這就是我最終完成的作品。

CGPoint offset = self.scrollView.contentOffset; 
CGPoint newOffset = CGPointMake(offset.x+100, offset.y); 

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAutoreverse |UIViewAnimationOptionRepeat animations:^{ 
    [UIView setAnimationRepeatCount: 2]; 
    [self.scrollView setContentOffset:newOffset animated: NO]; 
} completion:^(BOOL finished) { 
    [self.scrollView setContentOffset:offset animated:NO]; 
}]; 

回答

19

兩個選項:

1)使用-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView委託回調

2)儘量把它變成一個動畫塊(與... animated:NO];),其具有完成的部分。

+0

偉大的,似乎工作,謝謝。:) – huggie

+0

這工作,但動畫不使用我提供的持續時間。 它正在使用它的默認時間。 – Developer

30

對於滾動視圖,或者的tableView如果的CollectionView你做這樣的事情:

[self.collectionView setContentOffset:CGPointMake(self.collectionView.contentOffset.x+260.0, 
                self.collectionView.contentOffset.y) 
          animated:YES]; 

那麼你會得到一個:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 

當滾動結束。

如果用戶移動視圖,則不會獲得此回調。

+3

這是最正確的答案 – Lolloz89

+0

只有當所有setContentOffset調用都應該導致相同的功能時,此(很好)答案纔有效。例如,如果只需要對某些setContentOffset調用使用「完成」,則需要一些代碼雜技來實現此目的。 –

+4

另外,如果沒有動畫(例如,滾動偏移量爲0),則不調用scrollViewDidEndScrollingAnimation。 –