天天看點

iOS動畫開發之一——UIViewAnimation動畫的使用iOS動畫開發之一——UIViewAnimation動畫的使用

iOS動畫開發之一——UIViewAnimation動畫的使用

一、簡介

     一款APP的成功與否,除了完善的功能外,使用者體驗也占有極大的比重,動畫的合理運用,可以很好的增強使用者體驗。iOS開發中,常用的動畫處理有UIView動畫程式設計和核心動畫程式設計,其中UIView動畫使用簡便,開發中應用十分廣泛。這篇部落格,主要讨論UIView的動畫使用。

二、UIView動畫的幾個方法

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;

      這個是參數最少的一個方法,我們可以通過設定一個時間和block塊來完成動畫,時間參數是動畫執行的時長,block塊中為要執行的動畫動作,具體可以執行那些動作,我們會在後面說。例如在1S内将view漸變透明:

[UIView animateWithDuration:1 animations:^{

       _myView.alpha=0;

   }];

+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

      這個函數會帶兩個block塊,用法和第一個函數相似,設定一個執行時間和一個執行動作,第二個block塊中可以添加一個動畫執行結束後的動作,作為補充,例如下面代碼的效果,在1S内将view漸變為透明,動畫結束後,view在瞬間變回不透明:

   } completion:^(BOOL finished) {

       if (finished) {

           _myView.alpha=1;

       }

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

      這個函數除了上面的屬性外,可以設定延時執行,同時可以設定一個動畫效果參數,這個參數是個枚舉,它可以影響動畫的執行效果,後面會再總結。

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;

    這個函數是iOS7之後的一個新函數,通過這個函數,我們可以友善的制作出效果炫酷的動畫,這個函數的核心是兩個阻尼參數,參數dampingRatio可以了解為彈簧效果的強弱,設定1則沒有回彈效果,設定0則會劇烈的阻尼回彈。velocity參數用于設定彈簧的初始速度。

三、UIView動畫可以操作的視圖屬性

      通過上面的介紹,我們了解了幾個使用動畫的函數,那麼那些屬性可以産生動畫效果呢?

官方文檔告訴我們這些屬性是可以通過上述方法進行動畫的:

iOS動畫開發之一——UIViewAnimation動畫的使用iOS動畫開發之一——UIViewAnimation動畫的使用

四、動畫執行選項設定

  在UIView執行動畫的相關函數中,有UIViewAnimationOptions這個參數可以對動畫的執行效果進行設定,這個枚舉非常多,可分為三部分,如下:

enum {

  //這部分是基礎屬性的設定

  UIViewAnimationOptionLayoutSubviews            = 1 <<  0,//設定子視圖随父視圖展示動畫

  UIViewAnimationOptionAllowUserInteraction      = 1 <<  1,//允許在動畫執行時使用者與其進行互動

  UIViewAnimationOptionBeginFromCurrentState     = 1 <<  2,//允許在動畫執行時執行新的動畫

  UIViewAnimationOptionRepeat                    = 1 <<  3,//設定動畫循環執行

  UIViewAnimationOptionAutoreverse               = 1 <<  4,//設定動畫反向執行,必須和重複執行一起使用

  UIViewAnimationOptionOverrideInheritedDuration = 1 <<  5,//強制動畫使用内層動畫的時間值

  UIViewAnimationOptionOverrideInheritedCurve    = 1 <<  6,//強制動畫使用内層動畫曲線值

  UIViewAnimationOptionAllowAnimatedContent      = 1 <<  7,//設定動畫視圖實時重新整理

  UIViewAnimationOptionShowHideTransitionViews   = 1 <<  8,//設定視圖切換時隐藏,而不是移除

  UIViewAnimationOptionOverrideInheritedOptions  = 1 <<  9,//

  //這部分屬性設定動畫播放的線性效果

  UIViewAnimationOptionCurveEaseInOut            = 0 << 16,//淡入淡出 首末減速

  UIViewAnimationOptionCurveEaseIn               = 1 << 16,//淡入 初始減速

  UIViewAnimationOptionCurveEaseOut              = 2 << 16,//淡出 末尾減速

  UIViewAnimationOptionCurveLinear               = 3 << 16,//線性 勻速執行  

  //這部分設定UIView切換效果

  UIViewAnimationOptionTransitionNone            = 0 << 20,

  UIViewAnimationOptionTransitionFlipFromLeft    = 1 << 20,//從左邊切入

  UIViewAnimationOptionTransitionFlipFromRight   = 2 << 20,//從右邊切入

  UIViewAnimationOptionTransitionCurlUp          = 3 << 20,//從上面立體進入

  UIViewAnimationOptionTransitionCurlDown        = 4 << 20,//從下面立體進入

  UIViewAnimationOptionTransitionCrossDissolve   = 5 << 20,//溶解效果

  UIViewAnimationOptionTransitionFlipFromTop     = 6 << 20,//從上面切入

  UIViewAnimationOptionTransitionFlipFromBottom  = 7 << 20,//從下面切入

};

提示:1,屬性可以使用|進行多項合并。

         2,這類的動畫可以進行嵌套,其中有一點需要注意,内層動畫的執行時間和曲線模式會預設繼承外層動的,若要強制使用新的參數,使用如下的兩個參數:

UIViewAnimationOptionOverrideInheritedDuration = 1 <<  5,//強制動畫使用内層動畫的時間值

繼續閱讀