Swift語言中手寫代碼執行動畫效果

自動佈局的頁面在執行動畫效果時須要注意:swift

1).須要在viewDidAppear方法中執行動畫的效果的代碼。不要在viewDidLoad中執行動畫
控制器的生命週期:loadView-->viewDidLoad-->willSublayout-->DidSublayout-->viewWillAppear-->viewDidAppear--—>viewWIllDisappear—>viewDidDisappear

>viewDidAppear
//
界面已經出現的時候會自動調用數組

//這個方法是頁面顯示以後的生命週期方法 在這個方法中全部的子視圖的位置 已經設置完畢閉包

2).在自動佈局的頁面 不可以直接修改frame 來改變視圖的位置  -> 自動佈局的頁面視圖是有 frameapp

2.1.自動佈局的頁面的子視圖的frame 是在 viewDidlayoutSubViews 方法中 肯定的視圖的frame佈局

注意:自動佈局的頁面在使用動畫效果的時候 不可以直接修改frame 須要更新約束才行動畫

3).自動佈局系統的會在 viewWillLayoutSubViews生命週期方法以前 '收集' 約束spa

4).若是但願更新的約束可以提早展現動畫效果的運動軌跡,須要在更新完約束以後 強制刷新動畫,提早佈局頁面生命週期

5).要獲取動畫效果  必須將 提早刷新的方法layoutIfNeededci

,放在動畫閉包中執行animation

6.> 自動佈局更新約束 snp_updateXXX: 若是相同的約束存在就更新 約束不存在就直接建立約束

   private func  startAnimation() {

       
       
let OffsetY = -ScreenH + 180
       
//1.在動畫閉包中 更新約束  snp_updateConstraints: 若是該約束 已經存在 就更新約束 ,若是不存在就建立約束
        //usingSpringWithDamping: 彈簧係數  0 ~ 1  越小越彈
        //initialSpringVelocity: 加速度 9.8  重力加速度  若是但願彈簧動畫效果比較好 通常設置範圍 彈簧係數 * 10 ~= 加速度
        //options: 動畫的可選項  枚舉  OC:  位移枚舉  '|'  , swift 使用數組表示多個枚舉選項

       
UIView .animateWithDuration(1.5, delay: 0, usingSpringWithDamping: 0.98, initialSpringVelocity: 9.8, options: [], animations: { () -> Void in
           
           
           
//explicit  明確的  在閉包中使用  capture  獲取  semantics  語義的.   ---》要使用self
            self.iconImageView.snp_makeConstraints { (make) -> Void in
           
           
//自動佈局系統在這個階段並無修改視圖的frame  這個階段只是收集了 約束的變化
                make.bottom.equalTo(self.view.snp_bottom).offset(OffsetY)
            }
          
//強制刷新頁面  layoutIfNeeded
            self.view.layoutIfNeeded()
           
            }) { (
_) -> Void in
               
print("ok")
        }

    }

相關文章
相關標籤/搜索