AutoLayout動畫

日常咱們實現動畫都是直接調整frame,使用autolayout以後,建議調整constraint佈局

 

如上圖的約束都是能夠經過拖動,拖到.h或者.m文件中的,也是經過IBOutlet標識的動畫

若是你寫成下面的代碼, 發現動畫是不生效的spa

 [UIView animateWithDuration:1.0 animations:^{
        
        if (self.view.tag) {
            _xConstraint.constant = 20.0;
        } else {
            _xConstraint.constant = self.view.bounds.size.width - 120.0;
        }
    }];

你發現你添加的視圖是直來直去的,沒有動畫code

其實須要使用下面的代碼,來改變約束,產生動畫blog

    [UIView animateWithDuration:1.0 animations:^{
        
        if (self.view.tag) {
            _xConstraint.constant = 20.0;
        } else {
            _xConstraint.constant = self.view.bounds.size.width - 120.0;
        }
        // 告訴自動佈局系統,若是佈局變化,更新佈局
        
        [self.view layoutIfNeeded];
    }];

 

經過layoutIfNeeded,方法告訴視圖,當其子視圖發生變化的時候,更新佈局,而後再將這個動做包裹到動畫代碼中

或者下面的代碼也能夠,先改變約束,而後將通知視圖刷新的代碼寫到動畫塊裏animation

 if (self.view.tag) {
        _xConstraint.constant = 20.0;
    } else {
        _xConstraint.constant = self.view.bounds.size.width - 120.0;
    }

    [UIView animateWithDuration:1.0 animations:^{
        // demoView setFrame;
        // demoView setCenter;
        // 告訴自動佈局系統,若是佈局變化,更新佈局
        
        [self.view layoutIfNeeded];
    }];
相關文章
相關標籤/搜索