【问题标题】:Animation Blocks resets to original position after updating text更新文本后动画块重置为原始位置
【发布时间】:2014-11-04 14:32:43
【问题描述】:

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

                 }];
}

【问题讨论】:

  • 同样的问题,有人有解决办法吗?

标签: ios animation ios8 reset


【解决方案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);
                     }

                 }];
}

【讨论】:

  • 如果我这样做,我会看到视图闪烁。 :/ 不满意。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2013-03-03
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多