【问题标题】:AnimateWithDuration is functioning strangelyAnimateWithDuration 运行异常
【发布时间】:2013-02-15 20:54:36
【问题描述】:

出于某种原因,如果我只使用代码:

[UIView animateWithDuration:.5 delay:0
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:^{

                             CGRect newDescriptFrame = [self.summaryTextField frame];
                             newDescriptFrame.size.height = (bkgndRect.size.height - kbSize.height) - ((newDescriptFrame.origin.y) + 10);
                             self.descriptionTextView.frame = newDescriptFrame;

                         }
                         completion:^(BOOL finished){

                         }];

它可以很好地移动descriptionTextView,但如果我同时添加另一个动画块。

 [UIView animateWithDuration:.3 delay:.5
                        options:UIViewAnimationOptionCurveEaseInOut
                     animations:^{

                         self.summaryLabel.alpha = 0.0;
                         self.summaryLabel.alpha = 1.0;

                     }
                     completion:^(BOOL finished){}];

descriptionTextView 在第二块动画时恢复到动画之前的原始位置。为什么会这样?我如何解决它?如果我将 alpha 更改移动到与帧更改相同的块中。它根本不会为帧更改设置动画。

【问题讨论】:

  • 这可能是布局约束问题。您使用的是故事板还是 xib?如果是这样,请尝试关闭自动布局(左侧的第一个选项卡,文件检查器),看看是否可以解决问题。
  • @rdelmar 我必须使用 AutoLayout,因为我在所有其他视图中都使用它。如果我将帧更改从动画块中取出,则会发生另一件奇怪的事情,如果我有 alpha 动画块,它仍然不会改变。如果我注释掉 alpha 动画块,框架就会改变......
  • 有时你会看到它最初发生变化的地方,但是当另一个视图布局通过时,事情会恢复到原来的位置。如果您使用布局约束,那么您不应该设置框架。您应该为要更改的任何约束创建一个出口,并为约束设置动画。
  • @rdelmar 你能否提供一个例子来说明你的意思,即为我想改变的任何约束提供一个出口?我应该改用变换而不是换帧吗?我缩小了范围。如果我对 summaryLabel 执行任何操作,即使更改文本,框架也不会更改...
  • 对不起,我现在没有时间给你举个例子,但你没有使用转换。您为约束的常量属性设置动画。您应该查看 WWDC 2012 视频“掌握自动布局的最佳实践”,其中讨论了动画。

标签: ios objective-c xcode uitextview


【解决方案1】:

难道不是因为同一时刻只能执行一个动画吗?也就是说,如果您将两个动画放在一个代码块中,则实际上只会执行最后一个。

【讨论】:

    猜你喜欢
    • 2014-03-17
    • 2014-07-07
    • 1970-01-01
    • 2013-08-18
    • 2017-08-03
    • 2014-02-26
    • 2013-04-06
    • 2018-12-26
    • 2014-01-14
    相关资源
    最近更新 更多