成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解CoreAnimation中如何自定義動畫屬性

移動開發 iOS
CoreAnimation在對CALayer進行動畫生成時,需要用戶指定對CALayer的哪一個屬性進行插值,也就是必須聲明成@property的變量,來看內容,

CoreAnimation中如何自定義動畫屬性是本文要介紹的內容,CoreAnimation可以對UIView里的CALayer進行動畫處理。它的原理很簡單,用戶提供一個初始值,終點值和動畫持續時間,CoreAnimation自動對 初始值,終點值之間,按照動畫持續時間進行插值(生成中間值),生成中間幀,然后在一個單獨的線程里進行播放,程序員就不再需要自己去繪制中間幀。

CoreAnimation在對CALayer進行動畫生成時,需要用戶指定對CALayer的哪一個屬性進行插值,也就是必須聲明成@property的變量,使用各個動畫的虛擬超類CAPropertyAnimation的animationWithKeyPath方法來指定,例如下面的代碼說明要對CALayer的postion屬性進行插值。

  1. CABasicAnimation *aBasicAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; 

在缺省情況下,能對 CALayer指定的動畫屬性是固定的,例如bounds,postion,可以在XCode的開發文檔里查到,但是有的時候,我們需要對自定義的屬性進行動畫生成,這個就需要子類化CALayer,重載它的needsDisplayForKey方法

  1. + (BOOL)needsDisplayForKey:(NSString *)aKey {  
  2. if ([aKey isEqualToString:@"myProperty"]) {  
  3. return (YES);  
  4. } else {  
  5. return ([super needsDisplayForKey:aKey]);  
  6. }  

在這里,告訴CoreAnimation,我的CALayer子類有一個 myProperty屬性,請對它進行動畫插值。接下來,就可以重載

drawInContext方法,添加自己的關鍵幀繪畫代碼了。

子類化CALayer時,有個地方要注意,因為CoreAnimation在生成中間幀的方式,是通過Copy操作生成了一大堆中間幀用的CALayer,它在復制CALayer的數據時,只能對CALayer原有的屬性成員進行copy,不會copy后添加的諸如對象引用一類的東西,這就需要程序員重載

  1. - (id)initWithLayer:(id)layer  
  2. {  
  3. self = [super initWithLayer:layer];  
  4. if(self != nil) {  
  5. MyLayer *myLayer = (MyLayer*)layer;  
  6. self.aUIImage = cl.aUIImage;  
  7. }  
  8. return (self);  

來生動copy一些沒法自動copy的資源。

寫些小提示,像 drawInContex之類的繪圖方法中,盡量避免CGContextDrawImageInRect之類的元繪圖調用,因為這些元繪圖操作非常耗時,也是硬件加速幫不上忙的地方,盡量通過將CGImageRef傳給CALayer.contents屬性的方法把內容事先做好傳給CALayer,然后通過仿射或者3D transform的方法來進行動畫變換,  因為仿射或者3D transform是完全硬件加速的,它比自己書寫繪圖代碼要快的多的多。

小結:詳解CoreAnimation中如何自定義動畫屬性的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-03-17 09:45:01

Spring

2009-08-04 13:35:16

ASP.NET自定義樣

2021-12-02 18:05:21

Android Interpolato動畫

2013-04-01 14:35:10

Android開發Android自定義x

2023-10-31 09:10:39

2022-09-21 14:42:03

JSProps屬性

2009-06-10 14:02:11

netbeans自定義項目

2022-06-20 08:26:39

Spring容器類型轉換

2024-10-14 17:18:27

2021-11-23 15:06:42

Kubernetes 運維開源

2011-08-02 11:17:13

iOS開發 View

2013-06-27 11:10:01

iOS開發自定義UISlider

2009-08-06 17:13:56

ASP.NET自定義控

2015-10-12 16:47:13

iOS下拉線條動畫

2021-03-16 10:39:29

SpringBoot參數解析器

2019-12-02 21:29:45

Keras神經網絡TensorFlow

2011-09-05 18:54:03

windowsUbuntu

2021-07-01 11:07:49

Swift 自定義操作符

2011-07-05 18:51:51

QT 控件 鼠標

2009-04-23 09:05:08

IE8llq自定義功能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产三级大片 | 综合九九| 免费毛片网 | 91麻豆产精品久久久久久夏晴子 | 久久久成人免费视频 | 99资源站| 久久久成人动漫 | 日韩欧美国产精品 | 欧美日韩精品一区二区三区四区 | 亚洲日本三级 | 色888www视频在线观看 | 精品国产伦一区二区三区观看方式 | www.久久久久久久久 | 日韩一区不卡 | 干狠狠 | 成人精品国产 | a爱视频 | 亚洲第一女人av | 日韩av第一页 | 久久免费国产视频 | 视频一区二区在线观看 | 精品一区二区在线观看 | 欧美中文一区 | 深夜福利亚洲 | 黄色毛片在线看 | 91精品国产91久久久久久丝袜 | 成人欧美一区二区三区1314 | 在线观看成人免费视频 | 国产精品伦理一区二区三区 | 成人欧美一区二区三区在线观看 | 免费观看毛片 | 欧美在线一区二区三区 | 色狠狠一区 | 免费一级淫片aaa片毛片a级 | 日日夜夜天天 | 超碰在线久 | 中文字幕一区在线观看视频 | 国产精品久久 | 亚洲一区二区在线播放 | 欧美在线一区二区三区 | 中文字幕一二三区 |