更新文本后,animation块将重置为原始位置

我目前正在testing我的IOS 8版本的应用程序。我注意到,在执行了一个animation块之后,如果我更新了任何标签的文本,animation将重置。 我用下面的一个方法运行了一个简单的例子。 运行这个例子的结果如下:

  • 第一次点击myButtonanimation运行,但当标签文本被改变时重置。
  • 第二次单击myButton – animation运行但不会重置为原始位置。

这似乎是因为标签文本没有改变。 如果我完全删除了更新文本的行,这也会阻止animation在最后重置。

我想解决这个问题,以便当方法运行时,标签文本可以更新而不需要重新设置animation。

 - (IBAction)move:(id)sender { [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.myButton.center = CGPointMake(200, 300); }completion:^(BOOL finished){ if(finished){ self.myLabel.text=@"moved"; } }]; } 

在UIView上设置自动布局可能会导致此问题。 严格地说, 如果你使用自动布局,那么你不应该animation物体的绝对位置 – 你应该animation他们的约束,而不是

一旦您的animation正在进行,更改标签文本会触发布局刷新,并且iOS将随机播放一切,以符合原始视图约束。 (我怀疑这是从iOS7的行为改变)。

快速修复:取消选中视图上的自动布局,这应该按预期工作。

尝试这个。 将所需的animation也放在完成块中。

  - (IBAction)move:(id)sender { [UIView animateWithDuration:0.4 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ self.myButton.center = CGPointMake(200, 300); }completion:^(BOOL finished){ if(finished){ self.myLabel.text=@"moved"; self.myButton.center = CGPointMake(200, 300); } }]; }