动画约束更改 - (void)updateConstraints

时间:2015-02-25 21:49:43

标签: ios autolayout

我已经阅读了很多问题,为了约束变化的动画,我们只需要......

self.someConstraint.constant = 0.f;
[UIView animateWithDuration:0.5f animations:^{
    [self layoutIfNeeded];
}];

最近,我已经读过自定义视图子类应该在UIView上使用-(void)updateConstraints方法来执行约束更新,以防发生许多属性更改,从而导致您执行上述代码块在多个地方,这将导致许多不需要的布局传递。

UIView -(void)updateConstraints documentation

我实际上喜欢这种更新所有约束的方法。一些简单的代码...

- (void)updateConstraints
{
    if(someCondition)
    {
         self.someConstraint.constant = 0.f;
    }
    //Maybe some other conditions or constant changes go 
    here based on the current state of your view.
    [super updateConstraints];
}

此时,我的原始约束动画代码现在只变为

[self setNeedsUpdateConstraints];

唯一的问题是我现在失去了动画这些变化的能力 我查看了视图文档以找到一种方法来对约束的这些更改进行动画处理,但我似乎无法找到一个合适的方法来覆盖动画块中的[self layoutIfNeeded]。即使在这种情况下,我觉得应该没有必要调用它,因为将要执行布局,我觉得我不应该在那时强制它。

有谁知道如何使这些约束更改动画?

1 个答案:

答案 0 :(得分:2)

您需要致电<html> <video width="320" height="240" controls> <source src="videos/video1.mp4" type="video/mp4"> ----> PROBLEM lies here </video> </html> 。所以你的代码看起来像这样......

[self updateConstraintsIfNeeded]