看看人们的例子,我认为在一个方向上设置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条答案
按热度按时间34gzjxbg1#
这是因为接口生成器生成的约束与您的约束冲突。
在Interface Builder上自己创建约束并通过outlet以编程方式引用它们会更容易。