上次學習了 "iOS學習筆記09 核心動畫CoreAnimation" ,這次繼續學習動畫,上次使用的 很多人感覺使用起來很繁瑣,有沒有更加方便的動畫效果實現呢?答案是有的,那就是 UIView動畫封裝 一、UIView動畫 蘋果知道圖層動畫使用麻煩,就為我們封裝到了 里,使我們可以簡單的實現各種動 ...
上次學習了iOS學習筆記09-核心動畫CoreAnimation,這次繼續學習動畫,上次使用的CoreAnimation
很多人感覺使用起來很繁瑣,有沒有更加方便的動畫效果實現呢?答案是有的,那就是UIView動畫封裝
一、UIView動畫
蘋果知道圖層動畫使用麻煩,就為我們封裝到了UIView
里,使我們可以簡單的實現各種動畫效果。
1. 基礎動畫
主要實現方法為:
+ (void)animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
移動動畫使用實例:
/*
開始動畫,UIView的動畫方法執行完後動畫會停留在終點位置,而不需要進行任何特殊處理
duration:執行時間
delay:延遲時間
options:動畫設置,例如自動恢復、勻速運動等
completion:動畫完成回調方法
*/
[UIView animateWithDuration:5.0 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center = location;
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];
上面的方法基本滿足大部分基礎動畫的要求,還有一種比較有趣的動畫效果
彈簧動畫效果:
/*
創建彈性動畫
damping:阻尼,範圍0-1,阻尼越接近於0,彈性效果越明顯
springVelocity:彈性複位的速度
*/
[UIView animateWithDuration:5.0 delay:0 usingSpringWithDamping:0.1
initialSpringVelocity:1.0 options:UIViewAnimationOptionCurveLinear animations:^{
_imageView.center = location;
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];
UIView動畫方法中有個options參數,是枚舉類型,可以組合使用:
/* 常規動畫屬性設置,可以同時選擇多個,用或運算組合 */
UIViewAnimationOptionLayoutSubviews/*< 動畫過程中保證子視圖跟隨運動 */
UIViewAnimationOptionAllowUserInteraction/*< 動畫過程中允許用戶交互 */
UIViewAnimationOptionBeginFromCurrentState/*< 所有視圖從當前狀態開始運行 */
UIViewAnimationOptionRepeat/*< 重覆運行動畫 */
UIViewAnimationOptionAutoreverse/*< 動畫運行結束後回到起始點 */
UIViewAnimationOptionOverrideInheritedDuration/*< 忽略嵌套動畫時間設置 */
UIViewAnimationOptionOverrideInheritedCurve/*< 忽略嵌套動畫速度設置 */
UIViewAnimationOptionAllowAnimatedContent/*< 動畫過程中重繪視圖,只適合轉場動畫 */
UIViewAnimationOptionShowHideTransitionViews/*< 視圖切換直接隱藏舊視圖、顯示新視圖,只適合轉場動畫 */
UIViewAnimationOptionOverrideInheritedOptions/*< 不繼承父動畫設置或動畫類型 */
/* 動畫速度變化控制,其中選一個進行設置 */
UIViewAnimationOptionCurveEaseInOut/*< 動畫先緩慢,後逐漸加速,預設值 */
UIViewAnimationOptionCurveEaseIn/*< 動畫逐漸變慢 */
UIViewAnimationOptionCurveEaseOut/*< 動畫逐漸加速 */
UIViewAnimationOptionCurveLinear/*< 動畫勻速執行 */
2. 關鍵幀動畫
主要實現方法為:
+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
實例:
[UIView animateKeyframesWithDuration:5.0 delay:0
options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionCurveLinear animations:^{
//第一個關鍵幀:從0秒開始持續50%的時間,也就是5.0*0.5=2.5秒
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
_imageView.center = location1;
}];
//第二個關鍵幀:從50%時間開始持續25%的時間,也就是5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.25 animations:^{
_imageView.center = location2;
}];
//第三個關鍵幀:從75%時間開始持續25%的時間,也就是5.0*0.25=1.25秒
[UIView addKeyframeWithRelativeStartTime:0.75 relativeDuration:0.25 animations:^{
_imageView.center = location3;
}];
} completion:^(BOOL finished) {
NSLog(@"Animation end.");
}];
關鍵幀動畫的options多了一些選擇:
/* 動畫模式選擇,選擇一個 */
UIViewKeyframeAnimationOptionCalculationModeLinear/*< 連續運算模式 */
UIViewKeyframeAnimationOptionCalculationModeDiscreter/*< 離散運算模式 */
UIViewKeyframeAnimationOptionCalculationModePacedr/*< 均勻執行運算模式 */
UIViewKeyframeAnimationOptionCalculationModeCubicr/*< 平滑運算模式 */
UIViewKeyframeAnimationOptionCalculationModeCubicPacedr/*< 平滑均勻運算模式 */
UIView動畫現在只支持屬性關鍵幀動畫,不支持路徑關鍵幀動畫
3. 轉場動畫
主要實現方法為:
+ (void)transitionWithView:(UIView *)view
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
animations:(void (^)(void))ainimations
completion:(void (^)(BOOL finished))completion;
實例:
#pragma mark 轉場動畫
- (void)transitionAnimation:(BOOL)isNext{
UIViewAnimationOptions option;
if (isNext) {
option = UIViewAnimationOptionCurveLinear | UIViewAnimationOptionTransitionFlipFromRight;
} else {
option = UIViewAnimationOptionCurveLinear | UIViewAnimationOptionTransitionFlipFromLeft;
}
[UIView transitionWithView:_imageView duration:1.0 options:option animations:^{
_imageView.image = [self getImage:isNext];
} completion:nil];
}
轉場動畫options多了一些選擇:
/* 轉場類型 */
UIViewAnimationOptionTransitionNone/*< 沒有轉場動畫效果 */
UIViewAnimationOptionTransitionFlipFromLeft/*< 從左側翻轉效果 */
UIViewAnimationOptionTransitionFlipFromRight/*< 從右側翻轉效果 */
UIViewAnimationOptionTransitionCurlUp/*< 向後翻頁的動畫過渡效果 */
UIViewAnimationOptionTransitionCurlDown/*< 向前翻頁的動畫過渡效果 */
UIViewAnimationOptionTransitionCrossDissolve/*< 溶解消失效果 */
UIViewAnimationOptionTransitionFlipFromTop/*< 從上方翻轉效果 */
UIViewAnimationOptionTransitionFlipFromBottom/*< 從底部翻轉效果 */
- 使用UIView動畫封裝的轉場動畫效果少,這裡無法直接使用私有API
- 兩個視圖之間轉場可以使用
```
- (void)transitionFromView:(UIView )fromView
toView:(UIView )toView
duration:(NSTimeInterval)duration
options:(UIViewAnimationOptions)options
completion:(void (^)(BOOL finished))completion;
``` - 預設情況,轉出的視圖會從父視圖移除,轉入後重新添加