鍵-值編碼擴展
核心動畫擴展的NSKeyValueCoding協(xié)議,因為它涉及到CAAnimation和CALayer的類。本擴展增加了默認值對于某些按鍵,擴展包裹公約,并增加了對關鍵路徑支持CGPoint,CGRect,CGSize和CATransform3D類型。
鍵 - 值編碼兼容的容器類
該CAAnimation和CALayer的類都是鍵-值編碼兼容的容器類,這意味著你可以任意鍵設置值。即使關鍵someKey不是聲明的屬性的CALayer類,你仍然可以設置一個值,如下所示:
[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@“someKey”];
您還可以檢索任意鍵的值,就像您檢索等關鍵路徑的值。例如,要檢索的價值someKey路徑預先設定的,你可以使用下面的代碼:
someKeyValue = [theLayer valueForKey:@“someKey”];
OS X注:該CAAnimation和CALayer的類,它會自動存檔,您設置為這些類的實例任何額外的按鍵,支持NSCoding協(xié)議。
默認值支持
核心動畫添加了一個公約,以鍵值編碼由此類可以為沒有固定的價值的關鍵提供一個默認值。該CAAnimation和CALayer的類支持使用此約定defaultValueForKey:類方法。
為了提供一個關鍵的默認值,創(chuàng)建所需類的子類,并覆蓋其defaultValueForKey:方法。此方法的實現(xiàn)應該檢查關鍵參數(shù),并返回相應的默認值。清單C-1顯示了一個示例實現(xiàn)的defaultValueForKey:法一層對象,它提供了一個默認值masksToBounds財產(chǎn)。
清單C-1例實施defaultValueForKey的:
+(id)defaultValueForKey:(NSString *)key
{
if([key isEqualToString:@“masksToBounds”])
return [NSNumber numberWithBool:YES];
return [super defaultValueForKey:key];
}
包裝約定
當一個鍵的數(shù)據(jù)由標量值或C的數(shù)據(jù)結構,則必須將其分配給前層包裝類型中的一個對象。類似地,訪問該類型時,您必須檢索一個對象,然后解開使用擴展適當?shù)闹担赃m當?shù)念悺1鞢-1列出了C類常用的,你用它來 ??包裝他們的Objective-C類。
表C-1封裝類的C類型
為結構關鍵路徑支持
該CAAnimation和CALayer的類允許您訪問使用關鍵路徑選擇的數(shù)據(jù)結構的領域。此功能是一個方便的方式來指定要進行動畫處理的數(shù)據(jù)結構的領域。您也可以結合使用這些公約的setValue方法:forKeyPath:和valueForKeyPath:方法來設置和獲取這些字段。
CATransform3D關鍵路徑
您可以使用增強的關鍵路徑支持檢索特定的轉(zhuǎn)換值包含屬性CATransform3D數(shù)據(jù)類型。要指定一個圖層變換的全鍵路徑,你可以使用字符串值變換或sublayerTransform隨后在該領域的關鍵路徑之一表C-2。例如,要指定繞層的Z軸的旋轉(zhuǎn)因素,那么需要在關鍵路徑transform.rotation.z。
表C-2變換域值的關鍵路徑
領域的關鍵路徑
設置為一個的NSValue包含對象NSSize或CGSize數(shù)據(jù)類型。該數(shù)據(jù)類型表示在x和y軸平移量。
下面的例子演示了如何使用修改層的setValue:forKeyPath:方法。的例子設置翻譯因子為x軸,以10分,使由該量沿所指示的軸來移動層。
[myLayer的setValue:[NSNumber的numberWithFloat:10.0] forKeyPath:@“transform.translation.x”];
注:設置使用的關鍵路徑值是不一樣的使用Objective-C的屬性設置它們。您不能使用屬性標記來設置變換值。您必須使用的setValue:forKeyPath:方法與前面的關鍵路徑字符串。
CGPoint關鍵路徑
如果給定屬性的值是一個CGPoint數(shù)據(jù)類型,你可以附加在該領域的品牌之一表C-3的屬性來獲取或設置值。例如,要更改圖層的的x分量的位置屬性,你可以寫的關鍵路徑position.x。
表C-3CGPoint數(shù)據(jù)結構域
CGSize關鍵路徑
如果給定屬性的值是一個CGSize數(shù)據(jù)類型,你可以附加在該領域的品牌之一表C-4的屬性來獲取或設置值。
表C-4CGSize數(shù)據(jù)結構域
如果給定屬性的值是一個CGRect數(shù)據(jù)類型,可以追加以下字段名稱表C-3的屬性來獲取或設置值。例如,要更改圖層的寬度組件邊界屬性,你可以寫的關鍵路徑bounds.size.width。
表C-5CGRect數(shù)據(jù)結構域
未完待續(xù)。。。。