我正在创建一个自定义的NSLayoutConstraint子类,我需要知道布局约束的constant
属性当前是否为内部状态处理动画。换句话说,我需要区分:
{ //no animation
myLayoutConstraint.constant = 100;
}
和
{ //animated
myLayoutConstraint.constant = 100;
[UIView animateWithDuration:0.2 animations:^{
[self.myViewThatHasTheConstraintAttached layoutIfNeeded];
} completion:^(BOOL finished) {
[...]
}];
}
这样我就可以处理在动画中间接收消息的角落案例。这可能吗?
答案 0 :(得分:1)
这样做的唯一方法是在你想要访问它的地方设置一个布尔值并执行类似的操作......
{ //no animation
theView.animatingChange = NO;
myLayoutConstraint.constant = 100;
}
{ //animated
theView.animatingChange = YES;
myLayoutConstraint.constant = 100;
[UIView animateWithDuration:0.2 animations:^{
[self.myViewThatHasTheConstraintAttached layoutIfNeeded];
} completion:^(BOOL finished) {
[...]
theView.animatingChange = NO;
}];
}
视图上的属性会立即更改为动画的“结束”值。在动画时,它不会更改为所有中间值。只是屏幕上的绘图是动画的。