animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>函數
不是全部修改屬性的操做放到animations
代碼塊中都是變成動畫實現的 —— 無論你怎麼修改一個視圖的tag
,或者是delegate
。所以,可實現動畫的屬性一定會致使視圖的從新渲染。
這些能夠生成動畫的屬性大體能夠分紅這麼三類:座標尺寸
、視圖顯示
、形態變化
動畫
座標尺寸
:ui
center
屬性從新計算frame
。建議經過這個屬性修改尺寸center
跟bounds
屬性bounds
從新計算frame
視圖顯示:
url
形態變化
:spa
transform:修改這個屬性能夠實現旋轉、形變、移動、翻轉等動畫效果,其經過矩陣運算的方式來實現,所以更增強大code
上面咱們使用到的動畫方法中有一個重要的參數options
,它能讓你高度的自定義動畫效果。下面展現這個參數類型的值集合,你能夠經過結合不一樣的參數來實現本身的動畫:orm
Repeating:圖片
UIViewAnimationOptionRepeat //動畫循環執行 UIViewAnimationOptionAutoreverse //動畫在執行完畢後會反方向再執行一次
UIViewAnimationOptionRepeat
參數不只是讓動畫循環播放,而且還致使了completion
的回調永遠沒法執行
Easing:
UIViewAnimationOptionRepeatcompletion
UIViewAnimationOptionCurveEaseInOut //先加速後減速,默認(先加速,後減速) UIViewAnimationOptionCurveEaseIn //由慢到快(逐漸加速) UIViewAnimationOptionCurveEaseOut //由快到慢(速度領先,而後減速) UIViewAnimationOptionCurveLinear //勻速(勻速運動)
Transitioning:
在視圖、圖片切換的時候,咱們還能經過傳入下面的這些參數來實現一些特殊的動畫效果:使用方法
UIView transitionWithView:<#(nonnull UIView *)#> duration:<#(NSTimeInterval)#>
options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
UIViewAnimationOptionTransitionNone //沒有效果,默認 UIViewAnimationOptionTransitionFlipFromLeft //從左翻轉效果 UIViewAnimationOptionTransitionFlipFromRight //從右翻轉效果 UIViewAnimationOptionTransitionCurlUp //從上往下翻頁 UIViewAnimationOptionTransitionCurlDown //從下往上翻頁 UIViewAnimationOptionTransitionCrossDissolve //舊視圖溶解過渡到下一個視圖 UIViewAnimationOptionTransitionFlipFromTop //從上翻轉效果 UIViewAnimationOptionTransitionFlipFromBottom //從上翻轉效果
彈簧效果:
animateWithDuration:(NSTimeInterval) delay:<#(NSTimeInterval)#> usingSpringWithDamping:<#(CGFloat)#> initialSpringVelocity:<#(CGFloat)#>
options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
transform動畫:ip
transform
是一個很是重要的屬性,它在矩陣變換的層面上改變視圖的顯示效果,完成旋轉、形變、平移等等操做。在它被修改的同時,視圖的frame也會被真實改變。有兩個數據類型用來表示transform
,分別是CGAffineTransform
和CATransform3D
。前者做用於UIView
,後者爲layer
層次的變換類型。基於後者能夠實現更增強大的功能,但咱們須要先掌握CGAffineTransform
類型的使用.ci
在開始使用transform
實現你的動畫以前,先介紹幾個經常使用的函數:
/// 鏈接兩個變換效果 返回的t = t1 * t2 CGAffineTransformConcat(CGAffineTransform t1, CGAffineTransform t2) /// 矩陣初始值 [ 1 0 0 1 0 0 ] CGAffineTransformIdentity /// 自定義矩陣變換,須要掌握矩陣變換的知識才知道怎麼用。參照上面推薦的原理連接 CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty) /// 旋轉視圖。傳入參數爲 角度 * (M_PI / 180)。等同於 CGAffineTransformRotate(self.transform, angle) CGAffineTransformMakeRotation(CGFloat angle) 括號裏是旋轉度數 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle) /// 縮放視圖。等同於CGAffineTransformScale(self.transform, sx, sy) CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) 寬高縮放比例(能夠爲負數 當於對稱過去) CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy) /// 位移視圖。等同於CGAffineTransformTranslate(self.transform, tx, ty) CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) 是相對於原位置右移 下移的參數 CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)