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

Cra*_*Bae 18 animation reset ios ios8

我正在测试我的应用程序以发布IOS 8.我注意到在执行动画块之后,如果我更新任何标签的文本,动画将重置.我用一个如下所示的方法运行了一个简单的例子.运行此示例将导致以下结果:

  • 单击myButton第一个时间 - 动画运行,但在更改标签文本时重置.
  • 单击myButton第二次 - 动画运行但不会重置为原始位置.

这似乎是因为标签文本没有改变.如果我完全删除更新文本的行,这也会阻止动画在结束时重置.

我想解决这个问题,以便在方法运行时,可以更新标签文本而无需重置动画.

- (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";
                     }

                 }];
}
Run Code Online (Sandbox Code Playgroud)

小智 18

在UIView上设置自动布局可能会导致此问题.严格来说,如果您正在使用自动布局,那么您不应该为对象的绝对位置设置动画 - 您应该为其约束设置动画.

动画正在进行时更改标签文本会触发布局刷新,iOS会随机播放所有内容以符合原始视图约束.(我怀疑这是iOS7的行为改变).

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