Core Animation2-CABasicAnimation

本文目錄

一、平移動畫

二、縮放動畫

三、旋轉(zhuǎn)動畫

四、其他

CABasicAnimation是CAPropertyAnimation的子類,使用它可以實現(xiàn)一些基本的動畫效果,它可以讓CALayer的某個屬性從某個值漸變到另一個值。下面就用CABasicAnimation實現(xiàn)幾個簡單的動畫。

* 先初始化一個UIView添加到控制器的view中,然后在這個UIView的layer上執(zhí)行動畫,下面的self是指控制器

1_myView =[[UIView alloc] init];2_myView.layer.position= CGPointMake(100,100);3_myView.layer.bounds= CGRectMake(0,0,100,100);4_myView.backgroundColor=[UIColor blueColor];5[self.view addSubview:_myView];6[_myView release];

回到頂部

一、平移動畫

實現(xiàn)平移動畫有好幾種方法,這里列舉2種。

1.方法1

1//說明這個動畫對象要對CALayer的position屬性執(zhí)行動畫2CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"];3//動畫持續(xù)1.5s4anim.duration=1.5;56//position屬性值從(50, 80)漸變到(300, 350)7anim.fromValue= [NSValue valueWithCGPoint:CGPointMake(50,80)];8anim.toValue= [NSValue valueWithCGPoint:CGPointMake(300,350)];910//設(shè)置動畫的代理11anim.delegate=self;1213//保持動畫執(zhí)行后的狀態(tài)14anim.removedOnCompletion=NO;15anim.fillMode=kCAFillModeForwards;1617//添加動畫對象到圖層上18[_myView.layer addAnimation:anim forKey:@"translate"];

* 第2行設(shè)置的keyPath是@"position",說明要修改的是CALayer的position屬性,也就是會執(zhí)行平移動畫

* 注意第7、8行,這里并不是直接使用CGPoint這種結(jié)構(gòu)體類型,而是要先包裝成NSValue對象后再使用。這2行代碼表示CALayer從位置(50, 80)移動到位置(300, 350)

* 如果將第8行的toValue換成byValue,代表CALayer從位置(50, 80)開始向右移動300、向下移動350,也就是移動到位置(350, 430)

* 默認(rèn)情況下,動畫執(zhí)行完畢后,動畫會自動從CALayer上移除,CALayer又會回到原來的狀態(tài)。為了保持動畫執(zhí)行后的狀態(tài),可以加入第14、15行代碼

* 第18行后面的@"translate"是給動畫對象起個名稱,以后可以調(diào)用CALayer的removeAnimationForKey:方法根據(jù)動畫名稱停止相應(yīng)的動畫

* 第11行是設(shè)置動畫的代理,可以監(jiān)聽動畫的執(zhí)行過程,這里設(shè)置控制器為代理。代理需要實現(xiàn)的方法有:

1#pragmamark 動畫開始2- (void)animationDidStart:(CAAnimation *)anim {3NSLog(@"動畫開始了");4}56#pragmamark 動畫結(jié)束7- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {8//查看一下動畫執(zhí)行完畢后的position值9NSString *string=NSStringFromCGPoint(_myView.layer.position);10NSLog(@"動畫結(jié)束了,position:%@",string);11}

打印結(jié)果為:

12013-04-1423:44:26.197CAAnimation[5995:c07] 動畫開始了22013-04-1423:44:27.697CAAnimation[5995:c07] 動畫結(jié)束了,position:{100,100}

從第2行的打印信息可以看出,實際上,動畫執(zhí)行完畢后,并沒有真正改變CALayer的position屬性的值!

2.方法2

1CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];2anim.duration =1;34CATransform3Dform =CATransform3DMakeTranslation(350,350,0);5anim.toValue=[NSValue valueWithCATransform3D:form];67[_myView.layer addAnimation:anim forKey:nil];

通過CALayer的transform屬性實現(xiàn)平移動畫,layer會從自己的初始位置平移到(350, 350)位置

回到頂部

二、縮放動畫

實現(xiàn)縮放動畫有好幾種方法,這里列舉2種。

1.方法1

1CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"bounds"];2anim.duration =2;34anim.toValue = [NSValue valueWithCGRect:CGRectMake(0,0,30,30)];56[_myView.layer addAnimation:anim forKey:nil];

layer會從原來的尺寸(100x100)變?yōu)?0x30

2.方法2

1CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];2anim.duration =1.5;//動畫持續(xù)1.5s34//CALayer的寬度從0.5倍變?yōu)?倍5//CALayer的高度從0.5倍變?yōu)?.5倍6anim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5,0.5,1)];7anim.toValue? = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2,1.5,1)];89[_myView.layer addAnimation:anim forKey:nil];

回到頂部

三、旋轉(zhuǎn)動畫

1CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];2anim.duration =1.5;34//繞著(0, 0, 1)這個向量軸順時針旋轉(zhuǎn)45°5anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4,0,0,1)];67[_myView.layer addAnimation:anim forKey:nil];

其實可以不用設(shè)置fromValue,這里只設(shè)置了toValue

回到頂部

四、其他

* 除開前面使用的position、transform屬性,其實CALayer還有好多屬性都可以形成動畫,這些屬性統(tǒng)稱為"Animatable Properties"。在《CALayer3-層的屬性》開頭有介紹如何搜索這些屬性

*CABasicAnimation雖然能夠做很多基本的動畫效果,但是有個局限性,只能讓CALayer的屬性從某個值漸變到另一個值,僅僅是在2個值之間漸變

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,322評論 1 23
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,690評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,268評論 5 13
  • 參考文章1參考文章2 一、 Core Animation簡介 Core Animation可以用在Mac OS X...
    Mr_董閱讀 259評論 0 0
  • "小畫板程序"完成"小畫板"程序。 下載地址:http://git.oschina.net/changyou/my...
    _淺墨_閱讀 789評論 0 5

友情鏈接更多精彩內(nèi)容