【问题标题】:Execute animation in loop循环执行动画
【发布时间】:2015-04-01 22:17:30
【问题描述】:

这是非常有趣的情况: 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

所以坐标改变了,但是,我的对象没有动画。 它仅在 for 循环结束时才动画,但我需要在每次迭代时绘制。有没有直接的方法可以做到这一点?

【问题讨论】:

  • 你在 viewDidLoad 中这样做吗?如果是,请将其移至 viewWillAppear
  • @Chase 我是通过 buttonAction 来做的,所以没有 viewDidLoad 或 ViewWilAppear
  • “循环何时结束”是什么意思?你有围绕animateWithDuration:animations: 呼叫的for 循环吗?如果是这样,请编辑您的问题以包含更多代码。
  • @robmayoff 有一个巨大的代码,我认为它不会帮助你。在循环中执行动画 - 问题的名称。所以,是的,我想在循环中做一个动画,但它只在循环之后执行。
  • 请提供您的 for 循环

标签: ios objective-c animation uiview


【解决方案1】:

您不能将动画放在for 循环中。在您将控制权返回给主运行循环之前,动画不会开始,直到您的 for 循环和事件处理程序中的任何其他代码完成运行时才会发生。

相反,您需要使用animateWithDuration:animations:completion: 方法来提供完成块。动画结束时系统将运行您的完成块。在块中,您可以决定再次运行动画,或者做其他事情,或者什么都不做。

【讨论】:

  • 对不起,我不明白。我不能在每次迭代时做动画?或者我不能合法地做到这一点,有什么办法吗?
  • @user3224534 您在问题中提供的日志结果中的时间戳有助于解释您为什么需要完成处理程序。您应该观察到第二条日志语句是立即执行的,而不是等待动画块完成。
猜你喜欢
  • 1970-01-01
  • 2020-11-19
  • 2010-10-21
  • 2013-07-03
  • 2015-07-12
  • 1970-01-01
  • 2014-04-19
  • 2011-11-19
  • 1970-01-01
相关资源
最近更新 更多