一. 實現動畫基本步驟
- 創建動畫對象
- 設置動畫屬性
- 把動畫對象添加到某個 CALayer 對象上
- 需要停止動畫:可以調用 remove 方法移除動畫
二. iOS 中核心動畫種類
-
基本動畫(CABasicAnimation)
- 平移動畫
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"]; // 動畫持續1秒 anim.duration = 1; // 因為CGPoint是結構體,所以用NSValue包裝成一個OC對 anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 50)]; anim.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)]; [layer addAnimation:anim forKey:@"MyAnim"]; // 通過MyAnim可以取回相應的動畫對象,比如用來中途取消動畫
- 縮放動畫
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
// 沒有設置fromValue說明當前狀態作為初始值
// 寬度(width)變為原來的2倍,高度(height)變為原來的1.5倍
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 1.5, 1)];
anim.duration = 1;
[layer addAnimation:anim forKey:nil];
```
* 旋轉動畫
```objc
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
// 這里是以向量(1, 1, 0)為軸,旋轉π/2弧度(90°)
// 如果只是在手機平面上旋轉,就設置向量為(0, 0, 1),即Z軸
anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_2, 1, 1, 0)];
anim.duration = 1;
[layer addAnimation:anim forKey:nil];
// 1. 創建核心動畫的對象
CABasicAnimation* anim = [[CABasicAnimation alloc] init];
// 2. 設置核心動畫的操作
anim.keyPath = @"transform.rotation";
// 從哪
anim.fromValue = @(100);
// 到哪
anim.toValue = @(300);
anim.byValue = @(M_PI_4);
// 動畫完畢以后不回到原來的位置
anim.fillMode = kCAFillModeForwards;
anim.removedOnCompletion = NO;
// 3. 添加到layer上
[self.layer addAnimation:anim forKey:nil];
```
-
關鍵幀動畫(CAKeyframeAnimation)
- 關鍵幀動畫:有兩種形式
- 第一種是values的形式,
- 第二種是path路徑的形式;
- 關鍵幀動畫:有兩種形式
-
組動畫(CAAnimationGroup)
- 組動畫: CAAnimation的子類,可以保存一組動畫對象,將CAAnimationGroup對象加入層后,組中所有動畫對象可以同時并發運行
- 屬性解析:animations:用來保存一組動畫對象的NSArray
默認情況下,一組動畫對象是同時運行的,也可以通過設置動畫對象的beginTime屬性來更改動畫的開始時間
-
轉場動畫(CATransition)
- 轉場動畫: CAAnimation的子類,用于做轉場動畫,能夠為層提供移出屏幕和移入屏幕的動畫效果
除了核心動畫之外另外還有
圖片幀動畫:具體如下UIImageView可以讓一系列的圖片在特定的時間內按順序顯示
-
相關屬性解析:
- animationImages:要顯示的圖片(一個裝著UIImage的NSArray)
- animationDuration:完整地顯示一次animationImages中的所有圖片所需的時間
- animationRepeatCount:動畫的執行次數(默認為0,代表無限循環)相關方法解析:
// 動畫的一些操作
- (void)startAnimating; 開始動畫
- (void)stopAnimating; 停止動畫
- (BOOL)isAnimating; 是否正在運行動畫
未完待續.........