动画nslayoutconstraint中的常量 - 模糊布局

时间:2014-07-17 16:51:54

标签: ios

这可能是一个愚蠢的问题,但是看一看人们的例子,我认为在一个方向上动画NSLayoutConstraint.constant会非常​​简单。我的布局模糊不清,我不知道为什么。我有一个标签,我在viewDidLoad中设置了这些约束。

NSLayoutConstraint *xConstraint = [NSLayoutConstraint constraintWithItem:_locationLabel
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:NSLayoutRelationEqual
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:20];

    [self.view addConstraint:xConstraint];
    NSLayoutConstraint *yConstraint = [NSLayoutConstraint constraintWithItem:_locationLabel
                                                                   attribute:NSLayoutAttributeTop
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeTop
                                                                  multiplier:1.0
                                                                    constant:20];
    [self.view addConstraint:yConstraint];
    self.locationLabelYConstraint = yConstraint;

然后我只想在Y方向的水龙头上移动标签。在我的手势识别器方法中:

if (_locationLabelYConstraint.constant == 20.0) {
    _locationLabelYConstraint.constant = 30.0;
} else {
    _locationLabelYConstraint.constant = 20.0;
}
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.5 initialSpringVelocity:10 options:0 animations:^{
    self.isLocationLabelOnScreen = NO;
    [self.view layoutIfNeeded];
}completion:nil];

标签按照我的预期移动,但我立即对控制台进行了模糊的布局。

"<NSIBPrototypingLayoutConstraint:0xc0a73b0 'IB auto generated at build time for view with fixed frame' V:|-(20)-[UILabel:0xc0a4400]   (Names: '|':UIView:0xc0a65b0 )>",
"<NSLayoutConstraint:0xc0a6d90 V:|-(30)-[UILabel:0xc0a4400]   (Names: '|':UIView:0xc0a65b0 )>"

为了动画nslayoutconstraint的常量值,不要只更新常量值,并在动画块中调用layoutIfNeeded吗?谢谢。

1 个答案:

答案 0 :(得分:0)

这是因为Interface Builder正在生成与您的冲突相矛盾的约束。

在Interface Builder上自己创建约束更容易,并使用outlet以编程方式引用它们。