日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS核心动画 Core Animation2-CABasicAnimation

發布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS核心动画 Core Animation2-CABasicAnimation 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Core Animation2-CABasicAnimation

本文目錄
  • 一、平移動畫
  • 二、縮放動畫
  • 三、旋轉動畫
  • 四、其他

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

* 先初始化一個UIView添加到控制器的view中,然后在這個UIView的layer上執行動畫,下面的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]; 回到頂部

一、平移動畫

實現平移動畫有好幾種方法,這里列舉2種。

1.方法1

1 // 說明這個動畫對象要對CALayer的position屬性執行動畫 2 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"]; 3 // 動畫持續1.5s 4 anim.duration = 1.5; 5 6 // position屬性值從(50, 80)漸變到(300, 350) 7 anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(50, 80)]; 8 anim.toValue = [NSValue valueWithCGPoint:CGPointMake(300, 350)]; 9 10 // 設置動畫的代理 11 anim.delegate = self; 12 13 // 保持動畫執行后的狀態 14 anim.removedOnCompletion = NO; 15 anim.fillMode = kCAFillModeForwards; 16 17 // 添加動畫對象到圖層上 18 [_myView.layer addAnimation:anim forKey:@"translate"];

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

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

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

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

* 第18行后面的@"translate"是給動畫對象起個名稱,以后可以調用CALayer的removeAnimationForKey:方法根據動畫名稱停止相應的動畫

* 第11行是設置動畫的代理,可以監聽動畫的執行過程,這里設置控制器為代理。代理需要實現的方法有:

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

打印結果為:

1 2013-04-14 23:44:26.197 CAAnimation[5995:c07] 動畫開始了 2 2013-04-14 23:44:27.697 CAAnimation[5995:c07] 動畫結束了,position:{100, 100}

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

?

2.方法2

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

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

?

回到頂部

二、縮放動畫

實現縮放動畫有好幾種方法,這里列舉2種。

1.方法1

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

layer會從原來的尺寸(100x100)變為30x30

?

2.方法2

1 CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"]; 2 anim.duration = 1.5; // 動畫持續1.5s 3 4 // CALayer的寬度從0.5倍變為2倍 5 // CALayer的高度從0.5倍變為1.5倍 6 anim.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.5, 0.5, 1)]; 7 anim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(2, 1.5, 1)]; 8 9 [_myView.layer addAnimation:anim forKey:nil];

?

回到頂部

三、旋轉動畫

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

其實可以不用設置fromValue,這里只設置了toValue

?

回到頂部

四、其他

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

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


總結

以上是生活随笔為你收集整理的iOS核心动画 Core Animation2-CABasicAnimation的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。