UIView的動畫之初步學習

animateWithDuration:<#(NSTimeInterval)#> delay:<#(NSTimeInterval)#> options:<#(UIViewAnimationOptions)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>函數

  • duration: 動畫時長
  • delay: 決定了動畫在延遲多久以後執行
  • options:用來決定動畫的展現方式,接下來會進行講解
  • animations:轉化成動畫表示的代碼
  • completion:動畫結束後執行的代碼塊

不是全部修改屬性的操做放到animations代碼塊中都是變成動畫實現的 —— 無論你怎麼修改一個視圖的tag,或者是delegate。所以,可實現動畫的屬性一定會致使視圖的從新渲染。
這些能夠生成動畫的屬性大體能夠分紅這麼三類:座標尺寸視圖顯示形態變化動畫

座標尺寸:ui

    • bounds:修改這個屬性會結合center屬性從新計算frame。建議經過這個屬性修改尺寸
    • frame:修改這個屬性一般會致使視圖形變的同時也發生移動,而後會從新設置centerbounds屬性
    • center: 設置後視圖會移動到一個新位置,修改後會結合bounds從新計算frame

 

視圖顯示:url

  • backgroundColor: 修改這個屬性會產生顏色漸變過渡的效果,本質上是系統不斷修改了tintColor來實現的
  • alpha:修改這個屬性會產生淡入淡出的效果
  • hidden:修改這個屬性能夠製做翻頁隱藏的效果

形態變化: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#>
  • dampingRatio:速度衰減比例。取值範圍0 ~ 1,值越低震動越強
  • velocity:初始化速度,值越高則物品的速度越快

 transform動畫:ip

transform是一個很是重要的屬性,它在矩陣變換的層面上改變視圖的顯示效果,完成旋轉、形變、平移等等操做。在它被修改的同時,視圖的frame也會被真實改變。有兩個數據類型用來表示transform,分別是CGAffineTransformCATransform3D。前者做用於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)
相關文章
相關標籤/搜索