自動佈局的頁面在執行動畫效果時須要注意:swift
1).須要在viewDidAppear方法中執行動畫的效果的代碼。不要在viewDidLoad中執行動畫
控制器的生命週期:loadView-->viewDidLoad-->willSublayout-->DidSublayout-->viewWillAppear-->viewDidAppear--—>viewWIllDisappear—>viewDidDisappear
>viewDidAppear
//界面已經出現的時候會自動調用數組
//這個方法是頁面顯示以後的生命週期方法 在這個方法中全部的子視圖的位置 已經設置完畢閉包
2).在自動佈局的頁面 不可以直接修改frame 來改變視圖的位置 -> 自動佈局的頁面視圖是有 frame的app
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")
}
}