2015-04-01 118 views
-1

這是非常有趣的情況: NSLog(@「%@」,_matrix);循環執行動畫

嗨,我做動畫,如:

NSLog(@"%f %f", item.frame.origin.x, item.frame.origin.y); 


[UIView animateWithDuration:0.4 animations:^{ 
    item.frame = currentItemFrame; 
}]; 
NSLog(@"%f %f", item.frame.origin.x, item.frame.origin.y); 

日誌結果

2015-04-02 00:56:52.247 Project15[14543:806921] 49.000000 1.000000 
2015-04-02 00:56:52.247 Project15[14543:806921] 1.000000 1.000000 

所以座標改變,但是,我對象沒有動畫。 它僅在循環結束時才動畫,但我需要在每次迭代時繪製。有沒有直接的方法來做到這一點?

+0

你在做viewDidLoad嗎?如果你是,將它移動到viewWillAppear – Chase 2015-04-01 22:47:39

+0

@Chase我這樣做是通過buttonAction,所以沒有viewDidLoad或ViewWilAppear – 2015-04-01 22:49:55

+0

「什麼時候結束週期」是什麼意思?你有'animateWithDuration:動畫:'調用的'for'循環嗎?如果是這樣,請編輯您的問題以包含更多代碼。 – 2015-04-01 22:58:11

回答

1

您不能在for循環中放置動畫。直到您將控制權歸還給主運行循環之後,動畫纔會啓動,直到您的for循環以及您的事件處理程序中的任何其他代碼完成運行爲止。

相反,您需要使用animateWithDuration:animations:completion:方法來提供完成塊。系統將在動畫結束時運行完成塊。在該塊中,您可以決定再次運行動畫,或者做其他事情,或者什麼也不做。

+0

對不起,但我不明白。我無法在每次迭代中都做動畫?或者我不能做到合法,有什麼辦法? – 2015-04-01 23:09:49

+0

@ user3224534您在問題中提供的日誌結果中的時間戳幫助解釋您爲什麼需要完成處理程序。您應該觀察到第二個日誌語句會立即執行並且不會等待動畫塊完成。 – Bamsworld 2015-04-02 00:22:54