在使用Masonry来做页面布局的情况下添加动画效果

2018-04-22  本文已影响242人  HarlanHuang

之前在写代码的时候发现使用了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];
    }];
}
上一篇下一篇

猜你喜欢

热点阅读