鍵-值編碼擴(kuò)展
核心動(dòng)畫(huà)擴(kuò)展的NSKeyValueCoding協(xié)議编丘,因?yàn)樗婕暗?a target="_blank" rel="nofollow">CAAnimation和CALayer的類(lèi)。本擴(kuò)展增加了默認(rèn)值對(duì)于某些按鍵起愈,擴(kuò)展包裹公約用狱,并增加了對(duì)關(guān)鍵路徑支持CGPoint,CGRect灵巧,CGSize和CATransform3D類(lèi)型搀矫。
鍵 - 值編碼兼容的容器類(lèi)
該CAAnimation和CALayer的類(lèi)都是鍵-值編碼兼容的容器類(lèi)抹沪,這意味著你可以任意鍵設(shè)置值。即使關(guān)鍵someKey不是聲明的屬性的CALayer類(lèi)瓤球,你仍然可以設(shè)置一個(gè)值融欧,如下所示:
[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@“someKey”];
您還可以檢索任意鍵的值,就像您檢索等關(guān)鍵路徑的值卦羡。例如蹬癌,要檢索的價(jià)值someKey路徑預(yù)先設(shè)定的,你可以使用下面的代碼:
someKeyValue = [theLayer valueForKey:@“someKey”];
OS X注:該CAAnimation和CALayer的類(lèi)虹茶,它會(huì)自動(dòng)存檔逝薪,您設(shè)置為這些類(lèi)的實(shí)例任何額外的按鍵,支持NSCoding協(xié)議蝴罪。
默認(rèn)值支持
核心動(dòng)畫(huà)添加了一個(gè)公約董济,以鍵值編碼由此類(lèi)可以為沒(méi)有固定的價(jià)值的關(guān)鍵提供一個(gè)默認(rèn)值。該CAAnimation和CALayer的類(lèi)支持使用此約定defaultValueForKey:類(lèi)方法要门。
為了提供一個(gè)關(guān)鍵的默認(rèn)值虏肾,創(chuàng)建所需類(lèi)的子類(lèi),并覆蓋其defaultValueForKey:方法欢搜。此方法的實(shí)現(xiàn)應(yīng)該檢查關(guān)鍵參數(shù)封豪,并返回相應(yīng)的默認(rèn)值。清單C-1顯示了一個(gè)示例實(shí)現(xiàn)的defaultValueForKey:法一層對(duì)象炒瘟,它提供了一個(gè)默認(rèn)值masksToBounds財(cái)產(chǎn)吹埠。
清單C-1例實(shí)施defaultValueForKey的:
+(id)defaultValueForKey:(NSString *)key
{
if([key isEqualToString:@“masksToBounds”])
return [NSNumber numberWithBool:YES];
return [super defaultValueForKey:key];
}
包裝約定
當(dāng)一個(gè)鍵的數(shù)據(jù)由標(biāo)量值或C的數(shù)據(jù)結(jié)構(gòu),則必須將其分配給前層包裝類(lèi)型中的一個(gè)對(duì)象疮装。類(lèi)似地缘琅,訪(fǎng)問(wèn)該類(lèi)型時(shí),您必須檢索一個(gè)對(duì)象廓推,然后解開(kāi)使用擴(kuò)展適當(dāng)?shù)闹邓⑴郏赃m當(dāng)?shù)念?lèi)。表C-1列出了C類(lèi)常用的樊展,你用它來(lái) ??包裝他們的Objective-C類(lèi)呻纹。
表C-1封裝類(lèi)的C類(lèi)型
為結(jié)構(gòu)關(guān)鍵路徑支持
該CAAnimation和CALayer的類(lèi)允許您訪(fǎng)問(wèn)使用關(guān)鍵路徑選擇的數(shù)據(jù)結(jié)構(gòu)的領(lǐng)域。此功能是一個(gè)方便的方式來(lái)指定要進(jìn)行動(dòng)畫(huà)處理的數(shù)據(jù)結(jié)構(gòu)的領(lǐng)域专缠。您也可以結(jié)合使用這些公約的setValue方法:forKeyPath:和valueForKeyPath:方法來(lái)設(shè)置和獲取這些字段雷酪。
CATransform3D關(guān)鍵路徑
您可以使用增強(qiáng)的關(guān)鍵路徑支持檢索特定的轉(zhuǎn)換值包含屬性CATransform3D數(shù)據(jù)類(lèi)型。要指定一個(gè)圖層變換的全鍵路徑藤肢,你可以使用字符串值變換或sublayerTransform隨后在該領(lǐng)域的關(guān)鍵路徑之一表C-2太闺。例如,要指定繞層的Z軸的旋轉(zhuǎn)因素嘁圈,那么需要在關(guān)鍵路徑transform.rotation.z省骂。
表C-2變換域值的關(guān)鍵路徑
領(lǐng)域的關(guān)鍵路徑
設(shè)置為一個(gè)的NSValue包含對(duì)象NSSize或CGSize數(shù)據(jù)類(lèi)型蟀淮。該數(shù)據(jù)類(lèi)型表示在x和y軸平移量。
下面的例子演示了如何使用修改層的setValue:forKeyPath:方法钞澳。的例子設(shè)置翻譯因子為x軸怠惶,以10分,使由該量沿所指示的軸來(lái)移動(dòng)層轧粟。
[myLayer的setValue:[NSNumber的numberWithFloat:10.0] forKeyPath:@“transform.translation.x”];
注:設(shè)置使用的關(guān)鍵路徑值是不一樣的使用Objective-C的屬性設(shè)置它們策治。您不能使用屬性標(biāo)記來(lái)設(shè)置變換值。您必須使用的setValue:forKeyPath:方法與前面的關(guān)鍵路徑字符串兰吟。
CGPoint關(guān)鍵路徑
如果給定屬性的值是一個(gè)CGPoint數(shù)據(jù)類(lèi)型通惫,你可以附加在該領(lǐng)域的品牌之一表C-3的屬性來(lái)獲取或設(shè)置值。例如混蔼,要更改圖層的的x分量的位置屬性履腋,你可以寫(xiě)的關(guān)鍵路徑position.x。
表C-3CGPoint數(shù)據(jù)結(jié)構(gòu)域
CGSize關(guān)鍵路徑
如果給定屬性的值是一個(gè)CGSize數(shù)據(jù)類(lèi)型惭嚣,你可以附加在該領(lǐng)域的品牌之一表C-4的屬性來(lái)獲取或設(shè)置值遵湖。
表C-4CGSize數(shù)據(jù)結(jié)構(gòu)域
如果給定屬性的值是一個(gè)CGRect數(shù)據(jù)類(lèi)型,可以追加以下字段名稱(chēng)表C-3的屬性來(lái)獲取或設(shè)置值晚吞。例如延旧,要更改圖層的寬度組件邊界屬性,你可以寫(xiě)的關(guān)鍵路徑bounds.size.width槽地。
表C-5CGRect數(shù)據(jù)結(jié)構(gòu)域
未完待續(xù)迁沫。。闷盔。弯洗。