2011-11-25 64 views
13

後,所以我有這行代碼:執行任務(iOS中)動畫結束

[tableView setContentOffset:point animated:YES];

,我希望動畫結束後運行另一段代碼。我的嘗試是在一個單獨的方法扔動畫代碼(setContentOffset),並使用調用它:

[self performSelectorOnMainThread:@selector(scrollMethod:) withObject:sender waitUntilDone:YES];

的問題是,該方法將立即返回,而不是動畫結束後,即使waitUntilDone是YES ,但顯然這就是動畫的工作原理。

我知道我可以使用線程等待,但它不乾淨,所以我只會用它作爲最後的手段。 (也許我會用這個,如果我知道滾動動畫發生的時間。)

任何關於如何去做這個的想法都是值得歡迎的。 (PS的場景是這樣的:我顯示了一個彈出窗口,當沒有鍵盤時顯示完美,但是,如果鍵盤可見,彈出窗口的高度縮小,有時會將其縮小到幾乎邊框。顯示酥料餅之前,我要向上滾動視圖,以便酥料餅從未在彈出鍵盤)

回答

24

嘗試使用此方法。

[UIView animateWithDuration:0.6f 
         delay:0.0f 
        options:UIViewAnimationOptionCurveEaseOut 
       animations:^{ 
        // Do your animations here. 
       } 
       completion:^(BOOL finished){ 
        if (finished) { 
         // Do your method here after your animation. 
        } 
       }]; 
+0

準備回答同樣的問題...我想知道這是否會干擾tableView動畫。 – SpacyRicochet

+0

嗨@SpacyRicochet我剛剛嘗試過,它也可以。 :) – Kjuly

+0

然後,我的新答案仍然有益於教育目的:) – SpacyRicochet

35

的UITableView繼承setContentOffset:動畫:自其超, UIScrollView的。查看UIScrollViewDelegate的scrollViewDidEndScrollingAnimation:方法。

+4

+1實際閱讀問題並給出唯一正確的答案。 – Till

+0

謝謝搶劫。 +1這個簡單的方法。 – mrd3650

0

您可以創建動畫並告訴它們在完成後直接執行一個塊。

這是一個替代方案,可以在UITableView的動畫中更好地發揮作用。

[UIView beginAnimations:nil context:sender]; 
[UIView setDelegate:self]; 
[UIView setDidStopSelector:@selector(scrollMethod:)]; 
[tableView setContentOffset:point]; 
[UIView commitAnimations]; 

,並確保實現你scrollMethod:與此簽名:

- (void)scrollMethod:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 

您可以使用上下文來知道你有哪些sender。有關UIView動畫的更多信息,請閱讀UIView docs

+0

你甚至不知道讀完整個問題嗎? – Till

+2

@Till我開始回答後改變了,所以沒有。另外,如果你對此會感到尖銳,當問題提出想法時(你是否讀過整個問題?),沒有正確的答案;) – SpacyRicochet

+0

問題已在27分鐘前提出。你10分鐘前回答,問題尚未編輯。不確定屏幕上發生了什麼變化。 – Till

1

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

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

那麼你會得到一個:

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView 

當滾動結束。

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