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動畫可以操作的視圖屬性
通過上面的介紹,我們了解了幾個使用動畫的函數,那麼那些屬性可以産生動畫效果呢?
官方文檔告訴我們這些屬性是可以通過上述方法進行動畫的:
四、動畫執行選項設定
在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,//強制動畫使用内層動畫的時間值