【发布时间】: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