这可能是一个愚蠢的问题,但是看一看人们的例子,我认为在一个方向上动画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吗?谢谢。
答案 0 :(得分:0)
这是因为Interface Builder正在生成与您的冲突相矛盾的约束。
在Interface Builder上自己创建约束更容易,并使用outlet以编程方式引用它们。