iOS:核心動畫之動畫組CAAnimationGroup

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.