標籤:
CAAnimationGroup——動畫組動畫組,是CAAnimation的子類,可以儲存一組動畫對象,將CAAnimationGroup對象加入層後,組中所有動畫對象可以同時並發運行屬性說明:–animations:用來儲存一組動畫對象的NSArray預設情況下,一組動畫對象是同時啟動並執行,也可以通過設定動畫對象的beginTime屬性來更改動畫的開始時間 具體的執行個體如下:實現功能:在建立的動畫組中存入兩個基本動畫,一個是沿著Z軸旋轉360度的動畫,另一個是放大2倍的動畫,這兩個動畫並發執行,動畫結束後,均不在恢複原狀。代碼如下://聲明屬性
#import "ViewController.h"@interface ViewController ()@property (strong,nonatomic)CALayer *subLayer; //聲明核心動畫子層@end
//建立動畫子層,同時建立觸摸手勢,添加的手勢事件處理的是動畫組
@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //建立子層 self.subLayer = [CALayer layer]; self.subLayer.bounds = CGRectMake(100, 100, 100, 100); self.subLayer.position = CGPointMake(100, 100); self.subLayer.backgroundColor = [[UIColor redColor]CGColor]; [self.view.layer addSublayer:self.subLayer]; //添加觸摸手勢 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; tap.numberOfTapsRequired = 1; tap.numberOfTouchesRequired = 1; [self.view addGestureRecognizer:tap];}//定義方法,返回一個用於旋轉的基本動畫
#pragma mark 返回一個實現旋轉的基本動畫-(CABasicAnimation*)rotationAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue{ //建立基本動畫(用於旋轉) CABasicAnimation *baseAnimation = [[CABasicAnimation alloc]init]; //設定形變屬性值為旋轉屬性值 baseAnimation.keyPath = @"transform.rotation.z"; //設定旋轉初值 baseAnimation.fromValue = @(fromValue); //設定旋轉終值 baseAnimation.toValue = @(tovalue); //設定旋轉動畫期間 baseAnimation.duration = 1.0f; //設定動畫旋轉結束後不恢複原狀 baseAnimation.removedOnCompletion = NO; baseAnimation.fillMode = kCAFillModeForwards; return baseAnimation;}//定義方法,返回一個用於放縮的基本動畫
#pragma mark 返回一個實現放縮的基本動畫-(CABasicAnimation*)scaleAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue{ //建立基本動畫(用於放縮) CABasicAnimation *animScale = [[CABasicAnimation alloc]init]; //設定形變屬性為放縮屬性值 animScale.keyPath = @"transform.scale"; //設定放縮初值 animScale.fromValue = @(fromValue); //設定放縮終值 animScale.toValue = @(tovalue); //設定放縮動畫期間 animScale.duration = 1.0f; //設定動畫放縮結束後不恢複原狀 animScale.removedOnCompletion = NO; animScale.fillMode = kCAFillModeForwards; return animScale;}//處理觸摸手勢的事件,建立動畫組,並將上面返回的兩個動畫對象添加進去,然後並發的執行動畫組
#pragma mark -tap觸摸事件-(void)tap:(UITapGestureRecognizer *)sender{ //方式一:依次調用各個的動畫,效果也是可以的 //旋轉360度 //[self.subLayer addAnimation:[self rotationAnimationFromValue:-M_PI toValue:M_PI] forKey:@"baseAnimation"];
//放大2倍 //[self.subLayer addAnimation:[self scaleAnimationFromValue:1.0 toValue:2.0] forKey:@"animScale"];
//方式二:並發執行動畫組中的所有動畫 //建立動畫組 CAAnimationGroup *Group = [[CAAnimationGroup alloc]init]; //將各種動畫對象加入數組中 NSArray *animations = @[[self rotationAnimationFromValue:-M_PI toValue:M_PI],[self scaleAnimationFromValue:1.0 toValue:2.0]]; //動畫數組中的動畫的屬性受動畫組的統一控制 Group.animations = animations; //設定動畫組中所有動畫的期間 Group.duration = 1.0; //設定動畫組中所有動畫運行結束後不恢複原狀 Group.removedOnCompletion = NO; Group.fillMode = kCAFillModeForwards; //往子層中添加動畫組 [self.subLayer addAnimation:Group forKey:@"Group"];}示範結果如下:開始時: 某一時刻:(由於動畫過程中截取的圖,比較大一些) 結束時:
iOS:核心動畫之動畫組CAAnimationGroup