上次學習了iOS學習筆記09-核心動畫CoreAnimation,此次繼續學習動畫,上次使用的CoreAnimation
不少人感受使用起來很繁瑣,有沒有更加方便的動畫效果實現呢?答案是有的,那就是UIView動畫封裝html
蘋果知道圖層動畫使用麻煩,就爲咱們封裝到了UIView
裏,使咱們能夠簡單的實現各類動畫效果。spring
+ (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."); }];
上面的方法基本知足大部分基礎動畫的要求,還有一種比較有趣的動畫效果iview
/* 建立彈性動畫 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參數,是枚舉類型,能夠組合使用:ide
/* 常規動畫屬性設置,能夠同時選擇多個,用或運算組合 */ UIViewAnimationOptionLayoutSubviews/*< 動畫過程當中保證子視圖跟隨運動 */ UIViewAnimationOptionAllowUserInteraction/*< 動畫過程當中容許用戶交互 */ UIViewAnimationOptionBeginFromCurrentState/*< 全部視圖從當前狀態開始運行 */ UIViewAnimationOptionRepeat/*< 重複運行動畫 */ UIViewAnimationOptionAutoreverse/*< 動畫運行結束後回到起始點 */ UIViewAnimationOptionOverrideInheritedDuration/*< 忽略嵌套動畫時間設置 */ UIViewAnimationOptionOverrideInheritedCurve/*< 忽略嵌套動畫速度設置 */ UIViewAnimationOptionAllowAnimatedContent/*< 動畫過程當中重繪視圖,只適合轉場動畫 */ UIViewAnimationOptionShowHideTransitionViews/*< 視圖切換直接隱藏舊視圖、顯示新視圖,只適合轉場動畫 */ UIViewAnimationOptionOverrideInheritedOptions/*< 不繼承父動畫設置或動畫類型 */ /* 動畫速度變化控制,其中選一個進行設置 */ UIViewAnimationOptionCurveEaseInOut/*< 動畫先緩慢,後逐漸加速,默認值 */ UIViewAnimationOptionCurveEaseIn/*< 動畫逐漸變慢 */ UIViewAnimationOptionCurveEaseOut/*< 動畫逐漸加速 */ UIViewAnimationOptionCurveLinear/*< 動畫勻速執行 */
+ (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."); }];
/* 動畫模式選擇,選擇一個 */ UIViewKeyframeAnimationOptionCalculationModeLinear/*< 連續運算模式 */ UIViewKeyframeAnimationOptionCalculationModeDiscreter/*< 離散運算模式 */ UIViewKeyframeAnimationOptionCalculationModePacedr/*< 均勻執行運算模式 */ UIViewKeyframeAnimationOptionCalculationModeCubicr/*< 平滑運算模式 */ UIViewKeyframeAnimationOptionCalculationModeCubicPacedr/*< 平滑均勻運算模式 */
UIView動畫如今只支持屬性關鍵幀動畫,不支持路徑關鍵幀動畫post
+ (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]; }
/* 轉場類型 */ UIViewAnimationOptionTransitionNone/*< 沒有轉場動畫效果 */ UIViewAnimationOptionTransitionFlipFromLeft/*< 從左側翻轉效果 */ UIViewAnimationOptionTransitionFlipFromRight/*< 從右側翻轉效果 */ UIViewAnimationOptionTransitionCurlUp/*< 向後翻頁的動畫過渡效果 */ UIViewAnimationOptionTransitionCurlDown/*< 向前翻頁的動畫過渡效果 */ UIViewAnimationOptionTransitionCrossDissolve/*< 溶解消失效果 */ UIViewAnimationOptionTransitionFlipFromTop/*< 從上方翻轉效果 */ UIViewAnimationOptionTransitionFlipFromBottom/*< 從底部翻轉效果 */
- 使用UIView動畫封裝的轉場動畫效果少,這裏沒法直接使用私有API
- 兩個視圖之間轉場可使用
```