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

时间:2014-09-10 19:53:25

标签: ios animation ios8 reset

我正在测试我的应用程序以发布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";
                     }

                 }];
}

2 个答案:

答案 0 :(得分:18)

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

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

快速修复:取消查看视图上的自动布局,这应该可以正常工作。

答案 1 :(得分:1)

试试这个。将所需的动画也放在完成块中。

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

                 }];
}