首先,介紹一下UIView相關的動畫。 動畫屬性設置: 舉2個例子: 2. UIView Block動畫 這3個動畫比較簡單,不再多做敘述。 Spring動畫ios7.0以後新增了Spring動畫(IOS系統動畫大部分採用Spring Animation, 適用所有可被添加動畫效果的屬性) Keyf ...
首先,介紹一下UIView相關的動畫。
- UIView普通動畫:
[UIView beginAnimations: context:];
[UIView commitAnimations];
動畫屬性設置:
1 //動畫持續時間 2 [UIView setAnimationDuration:(NSTimeInterval)]; 3 //動畫的代理對象 4 [UIView setAnimationDelegate:(nullable id)]; 5 //設置動畫將開始時代理對象執行的SEL 6 [UIView setAnimationWillStartSelector:(nullable SEL)]; 7 //設置動畫延遲執行的時間 8 [UIView setAnimationDelay:(NSTimeInterval)]; 9 //設置動畫的重覆次數 10 [UIView setAnimationRepeatCount:(float)]; 11 //設置動畫的曲線 12 /* 13 UIViewAnimationCurve的枚舉值: 14 UIViewAnimationCurveEaseInOut, // 慢進慢出(預設值) 15 UIViewAnimationCurveEaseIn, // 慢進 16 UIViewAnimationCurveEaseOut, // 慢出 17 UIViewAnimationCurveLinear // 勻速 18 */ 19 [UIView setAnimationCurve:(UIViewAnimationCurve)]; 20 //設置是否從當前狀態開始播放動畫 21 /*假設上一個動畫正在播放,且尚未播放完畢,我們將要進行一個新的動畫: 22 當為YES時:動畫將從上一個動畫所在的狀態開始播放 23 當為NO時:動畫將從上一個動畫所指定的最終狀態開始播放(此時上一個動畫馬上結束)*/ 24 [UIView setAnimationBeginsFromCurrentState:YES]; 25 //設置動畫是否繼續執行相反的動畫 26 [UIView setAnimationRepeatAutoreverses:(BOOL)]; 27 //是否禁用動畫效果(對象屬性依然會被改變,只是沒有動畫效果) 28 [UIView setAnimationsEnabled:(BOOL)]; 29 //設置視圖的過渡效果 30 /* 第一個參數:UIViewAnimationTransition的枚舉值如下 31 UIViewAnimationTransitionNone, //不使用動畫 32 UIViewAnimationTransitionFlipFromLeft, //從左向右旋轉翻頁 33 UIViewAnimationTransitionFlipFromRight, //從右向左旋轉翻頁 34 UIViewAnimationTransitionCurlUp, //從下往上卷曲翻頁 35 UIViewAnimationTransitionCurlDown, //從上往下卷曲翻頁 36 第二個參數:需要過渡效果的View 37 第三個參數:是否使用視圖緩存,YES:視圖在開始和結束時渲染一次;NO:視圖在每一幀都渲染*/ 38 [UIView setAnimationTransition:(UIViewAnimationTransition) forView:(nonnull UIView *) cache:(BOOL)];
舉2個例子:
1 [UIView beginAnimations:@"xxx" context:nil]; 2 [UIView setAnimationDuration:5]; 3 [UIView setAnimationRepeatCount:MAXFLOAT]; 4 [UIView setAnimationDelegate:self]; 5 [UIView setAnimationDelay:3]; 6 [UIView setAnimationWillStartSelector:@selector(animationWillStart)]; 7 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 8 [UIView setAnimationRepeatAutoreverses:YES]; 9 10 self.iView.frame = CGRectMake(200, 400, 100, 100); 11 12 [UIView commitAnimations];
1 [UIView beginAnimations:@"xxx" context:nil]; 2 [UIView setAnimationDuration:2]; 3 [UIView setAnimationRepeatCount:MAXFLOAT]; 4 [UIView setAnimationDelegate:self]; 5 //[UIView setAnimationDelay:3]; 6 [UIView setAnimationWillStartSelector:@selector(animationWillStart)]; 7 [UIView setAnimationCurve:UIViewAnimationCurveLinear]; 8 //[UIView setAnimationRepeatAutoreverses:YES]; 9 10 [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.iView cache:YES]; 11 12 [UIView commitAnimations];
2. UIView Block動畫
1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間 2 animations:^{ 3 //執行的動畫 4 }];
1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間 2 animations:^{ 3 //執行的動畫 4 } completion:^(BOOL finished) { 5 //動畫結束的回調 6 }];
1 [UIView animateWithDuration:(NSTimeInterval)//動畫時間 2 delay:(NSTimeInterval)//動畫延遲時間 3 options:(UIViewAnimationOptions)//動畫過渡效果 4 animations:^{ 5 //執行動畫 6 } completion:^(BOOL finished) { 7 //動畫結束回調 8 }]
UIViewAnimationOptions的枚舉值:
UIViewAnimationOptionLayoutSubviews //進行動畫時佈局子控制項 UIViewAnimationOptionAllowUserInteraction //進行動畫時允許用戶交互 UIViewAnimationOptionBeginFromCurrentState //從當前狀態開始動畫 UIViewAnimationOptionRepeat //無限重覆執行動畫 UIViewAnimationOptionAutoreverse //執行動畫迴路 UIViewAnimationOptionOverrideInheritedDuration //忽略嵌套動畫的執行時間設置 UIViewAnimationOptionOverrideInheritedCurve //忽略嵌套動畫的曲線設置 UIViewAnimationOptionAllowAnimatedContent //轉場:進行動畫時重繪視圖 UIViewAnimationOptionShowHideTransitionViews //轉場:移除(添加和移除圖層的)動畫效果 UIViewAnimationOptionOverrideInheritedOptions //不繼承父動畫設置 UIViewAnimationOptionCurveEaseInOut //時間曲線,慢進慢出(預設值) UIViewAnimationOptionCurveEaseIn //時間曲線,慢進 UIViewAnimationOptionCurveEaseOut //時間曲線,慢出 UIViewAnimationOptionCurveLinear //時間曲線,勻速 UIViewAnimationOptionTransitionNone //轉場,不使用動畫 UIViewAnimationOptionTransitionFlipFromLeft //轉場,從左向右旋轉翻頁 UIViewAnimationOptionTransitionFlipFromRight //轉場,從右向左旋轉翻頁 UIViewAnimationOptionTransitionCurlUp //轉場,下往上卷曲翻頁 UIViewAnimationOptionTransitionCurlDown //轉場,從上往下卷曲翻頁 UIViewAnimationOptionTransitionCrossDissolve //轉場,交叉消失和出現 UIViewAnimationOptionTransitionFlipFromTop //轉場,從上向下旋轉翻頁 UIViewAnimationOptionTransitionFlipFromBottom //轉場,從下向上旋轉翻頁
這3個動畫比較簡單,不再多做敘述。
Spring動畫
ios7.0以後新增了Spring動畫(IOS系統動畫大部分採用Spring Animation, 適用所有可被添加動畫效果的屬性)
[UIView animateWithDuration:(NSTimeInterval)//動畫持續時間 delay:(NSTimeInterval)//動畫延遲執行的時間 usingSpringWithDamping:(CGFloat)//震動效果,範圍0~1,數值越小震動效果越明顯 initialSpringVelocity:(CGFloat)//初始速度,數值越大初始速度越快 options:(UIViewAnimationOptions)//動畫的過渡效果 animations:^{ //執行的動畫 } completion:^(BOOL finished) { //動畫執行提交後的操作 }];
[UIView animateWithDuration:3 delay:0 usingSpringWithDamping:0.2 initialSpringVelocity:5 options:UIViewAnimationOptionRepeat animations:^{ self.iView.frame = CGRectMake(200, 400, 100, 100); self.iView.transform = CGAffineTransformRotate(self.iView.transform, M_PI); } completion:^(BOOL finished) { }];
Keyframes動畫:
IOS7.0後新增了關鍵幀動畫,支持屬性關鍵幀,不支持路徑關鍵幀 [UIView animateKeyframesWithDuration:(NSTimeInterval)//動畫持續時間 delay:(NSTimeInterval)//動畫延遲執行的時間 options:(UIViewKeyframeAnimationOptions)//動畫的過渡效果 animations:^{ //執行的關鍵幀動畫 } completion:^(BOOL finished) { //動畫執行提交後的操作 }];
今天先寫到這,後續更新中... 若有不合理的地方,還望指出。
文章轉載:https://www.jianshu.com/p/9fa025c42261