使用autolayout为包含子视图的视图设置动画

时间:2013-10-14 11:32:35

标签: ios objective-c animation autolayout

这是设置:

  • 在Interface Builder上创建的UIView,链接到IBOutlet变量(_vAbout
  • 我们想要动画的此视图的约束,链接到IBOutlet变量(_ctrBottomAboutView

我正在使用此代码进行动画处理:

_ctrBottomAboutView.constant = -100;
[UIView animateWithDuration:0.5 animations:^{
    [_vAbout layoutIfNeeded];
}

我的问题是:每当视图中包含任何子视图时,动画都不起作用。但是,如果视图没有子节点,则动画可以正常工作。

您对解决方案有什么看法吗?我已经尝试了一切:添加和删除约束而不是修改常量值,在Interface Builder上为子视图添加约束......

1 个答案:

答案 0 :(得分:4)

经过一些空的项目从地面开始的一些实验后,这就是我发现的:

鉴于我们想要动画的视图和B的超级视图

  • 请务必注意,收到layoutIfNeeded消息的视图拥有约束的视图
  • NSLayoutAttributeWidthNSLayoutAttributeHeight的情况下,约束的所有者实际上是A,但在所有其他情况下,拥有约束的视图是B

无论其

  • 如果A没有任何子视图,我们可以随时在我们的代码上调用[A layoutIfNeeded],这样就可以了。
  • 如果A有一个或多个子视图,但我们在viewDidLoad上启动动画,我们可以调用[A layoutIfNeeded]并且它可以正常工作