2014-09-10 88 views
17

我目前正在测试我的应用程式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){ 
         [email protected]"moved"; 
        } 

       }]; 
} 
+0

同样的问题在这里,任何人都有这个解决方案? – 2014-09-22 06:37:13

回答

16

此问题可能是由在UIView上设置了自动布局引起的。严格来说,如果你使用自动布局,那么,那么你不应该动画物体的绝对位置 - 你应该动画他们的约束,而不是

更改标签文本,一旦你的动画正在进行触发布局刷新,而iOS洗牌周围的一切都符合原来的视图约束。 (我怀疑这是iOS7的行为改变)。

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

+0

这是工作。即使我不使用设置任何约束 – 2016-07-25 02:38:08

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){ 
         [email protected]"moved"; 
self.myButton.center = CGPointMake(200, 300); 
        } 

       }]; 
} 
+0

如果我这样做,我会看到视图闪烁。 :/不满意。 – fatuhoku 2015-09-22 11:57:02