自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解CoreAnimation中如何自定義動(dòng)畫屬性

移動(dòng)開(kāi)發(fā) iOS
CoreAnimation在對(duì)CALayer進(jìn)行動(dòng)畫生成時(shí),需要用戶指定對(duì)CALayer的哪一個(gè)屬性進(jìn)行插值,也就是必須聲明成@property的變量,來(lái)看內(nèi)容,

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

CoreAnimation在對(duì)CALayer進(jìn)行動(dòng)畫生成時(shí),需要用戶指定對(duì)CALayer的哪一個(gè)屬性進(jìn)行插值,也就是必須聲明成@property的變量,使用各個(gè)動(dòng)畫的虛擬超類CAPropertyAnimation的animationWithKeyPath方法來(lái)指定,例如下面的代碼說(shuō)明要對(duì)CALayer的postion屬性進(jìn)行插值。

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

在缺省情況下,能對(duì) CALayer指定的動(dòng)畫屬性是固定的,例如bounds,postion,可以在XCode的開(kāi)發(fā)文檔里查到,但是有的時(shí)候,我們需要對(duì)自定義的屬性進(jìn)行動(dòng)畫生成,這個(gè)就需要子類化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子類有一個(gè) myProperty屬性,請(qǐng)對(duì)它進(jìn)行動(dòng)畫插值。接下來(lái),就可以重載

drawInContext方法,添加自己的關(guān)鍵幀繪畫代碼了。

子類化CALayer時(shí),有個(gè)地方要注意,因?yàn)镃oreAnimation在生成中間幀的方式,是通過(guò)Copy操作生成了一大堆中間幀用的CALayer,它在復(fù)制CALayer的數(shù)據(jù)時(shí),只能對(duì)CALayer原有的屬性成員進(jìn)行copy,不會(huì)copy后添加的諸如對(duì)象引用一類的東西,這就需要程序員重載

  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);  

來(lái)生動(dòng)copy一些沒(méi)法自動(dòng)copy的資源。

寫些小提示,像 drawInContex之類的繪圖方法中,盡量避免CGContextDrawImageInRect之類的元繪圖調(diào)用,因?yàn)檫@些元繪圖操作非常耗時(shí),也是硬件加速幫不上忙的地方,盡量通過(guò)將CGImageRef傳給CALayer.contents屬性的方法把內(nèi)容事先做好傳給CALayer,然后通過(guò)仿射或者3D transform的方法來(lái)進(jìn)行動(dòng)畫變換,  因?yàn)榉律浠蛘?D transform是完全硬件加速的,它比自己書(shū)寫繪圖代碼要快的多的多。

小結(jié):詳解CoreAnimation中如何自定義動(dòng)畫屬性的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-03-17 09:45:01

Spring

2009-08-04 13:35:16

ASP.NET自定義樣

2021-12-02 18:05:21

Android Interpolato動(dòng)畫

2013-04-01 14:35:10

Android開(kāi)發(fā)Android自定義x

2023-10-31 09:10:39

2022-09-21 14:42:03

JSProps屬性

2009-06-10 14:02:11

netbeans自定義項(xiàng)目

2024-10-14 17:18:27

2022-06-20 08:26:39

Spring容器類型轉(zhuǎn)換

2011-08-02 11:17:13

iOS開(kāi)發(fā) View

2013-06-27 11:10:01

iOS開(kāi)發(fā)自定義UISlider

2021-11-23 15:06:42

Kubernetes 運(yùn)維開(kāi)源

2015-10-12 16:47:13

iOS下拉線條動(dòng)畫

2009-08-06 17:13:56

ASP.NET自定義控

2011-09-05 18:54:03

windowsUbuntu

2019-12-02 21:29:45

Keras神經(jīng)網(wǎng)絡(luò)TensorFlow

2021-07-01 11:07:49

Swift 自定義操作符

2009-04-23 09:05:08

IE8llq自定義功能

2024-11-27 11:07:20

vue計(jì)算屬性

2022-06-06 09:01:16

SwiftUI自定義導(dǎo)航
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)