[iOS]:删除和添加约束时自动布局动画更改框架位置
Posted
技术标签:
【中文标题】[iOS]:删除和添加约束时自动布局动画更改框架位置【英文标题】:[iOS]: Auto layout animate change of frame position when removing and adding constraints 【发布时间】:2014-05-01 15:06:36 【问题描述】:我有一个复杂的自动布局,需要通过删除旧约束并添加新约束来适应旋转。
我在containerView
中有一个网格布局。
问题是当我打电话时
[UIView animateWithDuration:0.4 animations:^
[self.containerView layoutIfNeeded];
];
视图总是从位置 [0,0] 动画到它们的新位置。我更喜欢的是视图将从旧位置(在我删除约束之前)移动到新位置(在删除和添加新约束之后)
有人能够做到这一点吗?
【问题讨论】:
给动画块添加约束操作怎么样? 你是在viewDidLoad
做这个吗?初始约束尚未应用,因此为 0,0。如果您在viewDidAppear
中执行此操作,您应该会看到它们从旧位置动画到新位置。如果这是一个基于旋转的动画,您尝试使用哪种方法调用它?此外,在删除旧约束后,您是否正在做任何可能触发(不存在的)约束被应用的事情(这可能发生在最无害的操作中,例如设置文本标签)?更多关于您将此代码放在何处的上下文可能会有所帮助。
【参考方案1】:
以下post 给了我使其工作的提示:
但不是实际接受的答案,而是:
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionLayoutSubviews animations:^
[self.view layoutIfNeeded];
completion:nil];
可选参数options:UIViewAnimationOptionLayoutSubviews
启发我尝试不同的选项,而实际需要的选项是options:UIViewAnimationOptionBeginFromCurrentState
[UIView animateWithDuration:duration delay:delay options:UIViewAnimationOptionBeginFromCurrentState animations:^
[self layoutIfNeeded];
completion:nil];
这允许动画从最后一个位置开始,即使移除约束并添加新约束。
【讨论】:
以上是关于[iOS]:删除和添加约束时自动布局动画更改框架位置的主要内容,如果未能解决你的问题,请参考以下文章