之前在写代码的时候发现使用了Masonry来做页面布局的情况下,通过UIView的animateWithDuration 方法来添加动画是不会有效果的,那么应该如何实现动画效果呢?
比如在点击某个按钮的时候需要更新约束,那么可以执行下面的方法:
- (void)updateLayout {
// 告诉当前的页面需要更新约束
[self.view setNeedsUpdateConstraints];
// 添加动画效果,3s执行完毕
[UIView animateWithDuration:3 animations:^{
// 更新约束
if (self.accountTextField.isShowKeyboard) {
[self.titleImage mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(0.f);
}];
[self.accountTextField mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_top).with.offset(SCREEN_SIZE_HEIGHT * 0.198);
}];
} else {
CGFloat scale = iPad ? 1.5f : 1.f;
[self.titleImage mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.mas_equalTo(65.f * scale);
}];
[self.accountTextField mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_top).with.offset(SCREEN_SIZE_HEIGHT * 0.35);
}];
}
// 告知发生变化的视图的父视图需要重新绘制
[self.titleImage.superview layoutIfNeeded];
[self.accountTextField.superview layoutIfNeeded];
}];
}
网友评论