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

之前在写代码的时候发现使用了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];
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容