鍵 值編碼擴充套件

2022-08-30 15:15:23 字數 2360 閱讀 3602

coreanimation擴充套件了nskeyvaluecoding協議,因為它從屬caanimationcalayer類。此擴充套件為某些鍵新增預設值,擴充套件封裝約定,為cgpointcgrectcgsizecatransform3d新增鍵路徑支援

鍵-值編碼遵從容器類
caanimationcalayer類是遵從容器類鍵-值編碼,也就是說可以為任意鍵設定值。即使鍵沒有在calayer類中宣告的屬性,你也可以用以下的方式設定值

[thelayer setvalue: @50 forkey: @"somekey"];
你也可以獲取任意鍵對應的值,像獲取其它鍵路徑對應的值一樣。如下

somekeyvalue = [thelayer valueforkey: @"somekey"];
支援預設值
coreanimation為鍵-值編碼新增乙個約定,即乙個類可為乙個鍵提供預設值,而不需設定值。caanimationcalayer類支援這個約定,通過使用defaultvalueforkey:類方法。為乙個key提供預設值,需要為期望的類建立乙個子類,同時遵循defaultvalueforkey:類方法。這個方法的實現要檢查鍵引數和返回合適的預設值。如下示例

+ (id)defaultvalueforkey:(nsstring *)key 

return [super defaultvalueforkey: key];

}

封裝約定

c 語言型別

封裝型別

cgpoint

nsvalue

cgsize

nsvalue

cgrect

nsvalue

catransform3d

nsvalue

cgaffinetransform

nsaffinetransform(os x only)

結構體鍵值路徑支援

caanimationcalayer類允許使用鍵路徑訪問結構體資料的字段。這個特性更便捷的指定結構體字段來獲取想要的動畫。通過setvalue: forkeypath:設定及valueforkeypath:獲取

[mylayer setvalue: @10.0 forkeypath: @"transform.translation.x"];
鍵路徑字段

描述rotation.x

設定 nsnumber 物件,x向弧度旋轉

rotation.y

設定 nsnumber 物件,y向弧度旋轉

rotation.z

設定 nsnumber 物件,z向弧度旋轉

rotation

設定 nsnumber 物件,與rotation.z 效果一樣

scale.x

設定 nsnumber 物件,x向拉伸因子

scale.y

設定 nsnumber 物件,y向拉伸因子

scale.z

設定 nsnumber 物件,z向拉伸因子

scale

設定 nsnumber 物件,三個方向拉伸因子

translation.x

設定 nsnumber 物件,x向移動值

translation.y

設定 nsnumber 物件,y向移動值

translation.z

設定 nsnumber 物件,z向移動值

translation

設定 nsvalue 物件(包含nssize 或 cgsize資料型別),x和y向移動值

結構字段描述x

點的x值

y點的y值

結構字段

描述width

寬height

高結構字段

描述origin

點origin.x

x值origin.y

y值size

大小size.width

寬size.height

KeyValueCoding 鍵值編碼

void btnclick uibutton btn if btn.tag 100 修改 teacher 的變數 else 修改 student 的變數 sm setvalue xiaoxin forkey name 給成員變數賦值 void setvalues sm studentmodel al...

鍵值編碼KVC

許多程式設計技術都基於間接機制,包括整個物件導向程式設計領域。本章將介紹另一種間接機制,這種機制不屬於obj c語言的特性,而是cocoa提供的一種特性。我們知道在c 中可以通過反射讀寫乙個物件的屬性,有時候這種方式特別方便,因為你可以利用字串的方式去動態控制乙個物件。其實由於objc的語言特性,你...

Oc KVC 鍵值編碼

是一種間接地訪問物件例項變數的機制 通過setvalue forkey 間接地為物件的例項變數做賦值 通過valueforkey 間接地取到物件的例項變數 首先定義兩個類person類 和phone類 1.先檢查有沒有name這個例項變數 2.如果沒有,會檢查同名的帶 的例項變數 3.如果還沒有,會...