我正在尝试使用以下代码在动画中增加自定义键盘的高度。 但我无法弄清楚为什么变化会立即发生,忽略动画。
//In viewDidAppear
[self.view needsUpdateConstraints];
[UIView animateWithDuration:2 animations:^{
CGFloat _expandedHeight = 500;
NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint
constraintWithItem: self.view
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: _expandedHeight];
[self.view addConstraint: _heightConstraint];
[self.view layoutIfNeeded];
}];
答案 0 :(得分:0)
首先在动画块之外添加约束,然后调用更新约束,并在动画块内部调用layoutIfNeeded .Hope这将起作用
CGFloat _expandedHeight = 500;
NSLayoutConstraint *_heightConstraint = [NSLayoutConstraint
constraintWithItem: self.view
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: _expandedHeight];
[self.view addConstraint: _heightConstraint];
[self.view needsUpdateConstraints];
[UIView animateWithDuration:2 animations:^{
[self.view layoutIfNeeded];
}];
答案 1 :(得分:0)
以下是我用来设置线条中心X位置动画的代码。我已使用IBOutlet NSLayoutConstraint将此行的中心X与某个参考视图中心相连。为了使用autolayout进行动画,需要更新约束并调用动画块内的layoutIfNeeded。这绝对是具有自动布局的动画的想法。
blueScrollerCenterXConstraint.constant = (btn.tag - 4000)*btn.frame.size.width;
[blueScroller updateConstraints];
[UIView animateWithDuration:0.3 animations:^{
[blueScroller layoutIfNeeded];
}];
答案 2 :(得分:0)
您不应该在那里添加约束。
添加并禁用它(或将优先级设置得非常低)。
之后,将优先级更改为999并在动画块中调用layoutIfNeded。