ios - 动画 block 在更新文本后重置为原始位置

标签 ios animation ios8 reset

我目前正在针对 IOS 8 版本测试我的应用程序。我注意到在我执行动画 block 后,如果我更新任何标签的文本,动画会重置。我用下面显示的一种方法运行了一个简单的例子。运行此示例会产生以下结果:

  • 第一次单击 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";
                     }

                 }];
}

最佳答案

此问题可能是由于在 UIView 上设置了自动布局引起的。严格来说,如果您正在使用自动布局,那么您不应该为对象的绝对位置设置动画——您应该为它们的约束设置动画

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

快速修复: View 上的自动布局,这应该按预期工作。

关于ios - 动画 block 在更新文本后重置为原始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773952/

相关文章:

html - CSS3 动画位置

html - 如何为元素设置动画而不丢失边界半径?

ios - 后台推送适用于 iOS7 但不适用于 iOS8

objective-c - 无效的图像路径 - 未找到图像 AppIcon120x120

ios - Facebook SDK 导致 React Native 构建失败

ios - 对解析本地数据存储和缓存感到困惑

div 高度上的 Angular 2/4 动画

iphone - 在 IOS 应用程序中共享扩展

ios - 即使在设置了操作的优先级和依赖性之后,操作队列也没有按顺序执行

ios ScrollView 的自动布局架构技巧