鍵-值編碼遵從容器類coreanimation
擴充套件了nskeyvaluecoding
協議,因為它從屬caanimation
和calayer
類。此擴充套件為某些鍵新增預設值,擴充套件封裝約定,為cgpoint
、cgrect
、cgsize
、catransform3d
新增鍵路徑支援
caanimation
和calayer
類是遵從容器類鍵-值編碼,也就是說可以為任意鍵設定值。即使鍵沒有在calayer
類中宣告的屬性,你也可以用以下的方式設定值
[thelayer setvalue: @50 forkey: @"somekey"];
你也可以獲取任意鍵對應的值,像獲取其它鍵路徑對應的值一樣。如下
somekeyvalue = [thelayer valueforkey: @"somekey"];
支援預設值coreanimation
為鍵-值編碼新增乙個約定,即乙個類可為乙個鍵提供預設值,而不需設定值。caanimation
和calayer
類支援這個約定,通過使用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)
結構體鍵值路徑支援
caanimation
和calayer
類允許使用鍵路徑訪問結構體資料的字段。這個特性更便捷的指定結構體字段來獲取想要的動畫。通過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.如果還沒有,會...