2015-04-01 114 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