動(dòng)畫中關(guān)于KVC官方文檔翻譯

CoreAnimation讓CAAnimation和CALayer都繼承于NSKeyValueCoding協(xié)議脖咐,因?yàn)檫@個(gè)繼承關(guān)系為它們?cè)黾恿艘恍┠J(rèn)的keys(對(duì)應(yīng)的value),添加的keyPath中包括了CGPoint,CGRect,CGSize和CATransform3D類型滑废。

1.鍵值編碼兼容的容器類

CAAnimation和CALayer類就是作為鍵值編碼兼容的容器類闰挡,我們可以根據(jù)任意的keys來(lái)設(shè)置對(duì)應(yīng)的value鹃觉,即便這個(gè)key不是CALayer公開(kāi)的屬性酷鸦,比如:

[theLayer setValue:[NSNumber numberWithInteger:50] forKey:@"someKey"];

同樣也可以通過(guò)任意已知的keys來(lái)查找對(duì)應(yīng)的values荆责,可以使用下面的代碼通過(guò)預(yù)先設(shè)置好的somekey來(lái)檢索values:

someKeyValue=[theLayer valueForKey:@"someKey"];

2.默認(rèn)支持的value

CoreAnimation在鍵值編碼時(shí)規(guī)定:一個(gè)類可以給沒(méi)有value的key提供一個(gè)默認(rèn)值滥比。CAAnimation和CALayer類都提供了類方法defaultValueForKey

對(duì)于為key提供了默認(rèn)value的類做院,在創(chuàng)建這個(gè)類的子類時(shí)必須要重寫它的defaultValueForKey方法盲泛。

當(dāng)你在實(shí)現(xiàn)這個(gè)方法的時(shí)候,需要檢查key的參數(shù)列表键耕,并且返回一個(gè)合適的value值查乒,下面提供了一個(gè)例子,layer提供了defaultValueForKey:方法郁竟,為maskToBounds屬性設(shè)置默認(rèn)值:

+ (id)defaultValueForKey:(NSString *)key{
   if ([key isEqualToString:@"masksToBounds"])
      return [NSNumber numberWithBool:YES];
      return [super defaultValueForKey:key];
}

3.封裝

當(dāng)一個(gè)key的數(shù)據(jù)是由一個(gè)標(biāo)量值或者一個(gè)C的數(shù)據(jù)結(jié)構(gòu)時(shí)玛迄,你必須要在其被分配到layer之前對(duì)其進(jìn)行封裝。同樣的棚亩,當(dāng)要訪問(wèn)這些Type時(shí)蓖议,也必須檢查對(duì)象,然后使用合適的方法來(lái)打開(kāi)合適的值讥蟆。下表顯示了Objective-c和c類型封裝

C type 輸入
CGPoint NSValue
CGSize NSValue
CGRect NSValue
CATransform3D NSValue
CGAffineTransform NSAffineTransform (OS X only)

不同類型封裝的類

4.為KeyPath的提供的結(jié)構(gòu)

CAAnimation和CALayer類使用KeyPath來(lái)訪問(wèn)指定的字段勒虾,這功能可以讓你在做動(dòng)畫時(shí)為特定的KeyPath提供數(shù)據(jù)。使用setValue:forKeyPath和valueForKeyPath:方法設(shè)置瘸彤,然后用valueForKeyPath:獲取相應(yīng)的值修然。

(1)、CATransform3D KeyPaths

你可以使用更強(qiáng)大的KeyPath质况,查找包含了CATransform3D類型屬性的值愕宋。在需要指定layer的transforms完整的KeyPath時(shí),我們可以根據(jù)下表中提供的數(shù)據(jù)结榄,使用transformsublayerTransform的值中贝。例如,我們需要制定繞著layer的z軸旋轉(zhuǎn)時(shí)臼朗,我就需要指定KeyPath為transform.rotation.z邻寿。

Field Key Path 描述
rotation.x 圍繞X軸,旋轉(zhuǎn)值為弧度视哑,NSNumber類型
rotation.y 圍繞y軸绣否,旋轉(zhuǎn)值為弧度,NSNumber類型
rotation.z 圍繞z軸挡毅,旋轉(zhuǎn)值為弧度蒜撮,NSNumber類型
rotation 圍繞z軸,旋轉(zhuǎn)值為弧度慷嗜,NSNumber類型淀弹,它和設(shè)置rotation.z一樣
scale.x x軸縮放丹壕,NSNumber類型
scale.y y軸縮放,NSNumber類型
scale.z z軸縮放薇溃,NSNumber類型
scale 三個(gè)軸縮放的平均值菌赖,NSNumber類型
translation.x x軸位移,NSNumber類型
translation.y y軸位移沐序,NSNumber類型
translation.z z軸位移琉用,NSNumber類型
translation x,y上面位移策幼,NSSizeCGSize

下面展示了怎樣通過(guò)setValue:forKeyPath方法來(lái)修改一個(gè)layer邑时,這個(gè)例子設(shè)置了layer在x軸上位移了10個(gè)像素點(diǎn),來(lái)顯示layer在x軸上的移動(dòng):

[myLayer setValue:[NSNumber numberWithFloat:10.0] forKeyPath:@"transform.translation.x"];

?注意:通過(guò)keyPath來(lái)設(shè)置value值的時(shí)候不能像Objective-C里面對(duì)屬性的賦值特姐,必須配合KeyPath字符串使用setValue:forKeyPath方法來(lái)進(jìn)行賦值晶丘。

(2)、CGPoint KeyPath

如果當(dāng)前給的是一個(gè)CGPoint類型唐含,則可以根據(jù)下表進(jìn)行設(shè)置浅浮。例如,當(dāng)我們想要修改layer的position的x值時(shí)捷枯,可以在KeyPath中寫position.x滚秩。

Structure Field 描述
x x的分量
y y的分量

(3)、CGSize KeyPath

Structure Field 描述
width size的width值
height size的height值

(4)淮捆、CGRect KeyPath

例如郁油,要更改layer的bounds屬性的width值,可以寫入關(guān)鍵路徑bounds.size.width

Structure Field 描述
origin 坐標(biāo)攀痊,類型CGPoint
origin.x 坐標(biāo)的x值桐腌,類型CGFloat
origin.y 坐標(biāo)的y值,類型CGFloat
size 大小蚕苇,類型CGSize
size.width size的width值
size.height size的height值

結(jié)語(yǔ)

翻譯這篇文章的目的因?yàn)槲以谧鰟?dòng)畫中需要每次都差到對(duì)應(yīng)的KeyPath哩掺,很麻煩,索性我就將其翻譯出來(lái)涩笤。
到目前為止,這片文章大部分翻譯算是完成了盒件,看起來(lái)很粗糙蹬碧,能看懂就最好了。

原來(lái)地址:Key-Value Coding Extensions

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炒刁,一起剝皮案震驚了整個(gè)濱河市恩沽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翔始,老刑警劉巖罗心,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件里伯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡渤闷,警方通過(guò)查閱死者的電腦和手機(jī)疾瓮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)飒箭,“玉大人狼电,你說(shuō)我怎么就攤上這事∠阴澹” “怎么了肩碟?”我有些...
    開(kāi)封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凸椿。 經(jīng)常有香客問(wèn)我削祈,道長(zhǎng),這世上最難降的妖魔是什么脑漫? 我笑而不...
    開(kāi)封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任岩瘦,我火速辦了婚禮,結(jié)果婚禮上窿撬,老公的妹妹穿的比我還像新娘启昧。我一直安慰自己,他們只是感情好劈伴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布密末。 她就那樣靜靜地躺著,像睡著了一般跛璧。 火紅的嫁衣襯著肌膚如雪严里。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天追城,我揣著相機(jī)與錄音刹碾,去河邊找鬼。 笑死座柱,一個(gè)胖子當(dāng)著我的面吹牛迷帜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播色洞,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼戏锹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了火诸?” 一聲冷哼從身側(cè)響起锦针,我...
    開(kāi)封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奈搜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悉盆,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年馋吗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焕盟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耗美,死狀恐怖京髓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情商架,我是刑警寧澤堰怨,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站蛇摸,受9級(jí)特大地震影響备图,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赶袄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一揽涮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饿肺,春花似錦蒋困、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至溉跃,卻和暖如春村刨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撰茎。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工嵌牺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龄糊。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓逆粹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親绎签。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枯饿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜诡必,今天將帶大家一窺ios動(dòng)畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,473評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜爸舒,今天將帶大家一窺iOS動(dòng)畫全貌蟋字。在這里你可以看...
    F麥子閱讀 5,105評(píng)論 5 13
  • 在iOS實(shí)際開(kāi)發(fā)中常用的動(dòng)畫無(wú)非是以下四種:UIView動(dòng)畫,核心動(dòng)畫扭勉,幀動(dòng)畫鹊奖,自定義轉(zhuǎn)場(chǎng)動(dòng)畫。 1.UIView...
    請(qǐng)叫我周小帥閱讀 3,083評(píng)論 1 23
  • Core Animation Core Animation涂炎,中文翻譯為核心動(dòng)畫忠聚,它是一組非常強(qiáng)大的動(dòng)畫處理API,...
    45b645c5912e閱讀 3,020評(píng)論 0 21
  • 顯式動(dòng)畫 顯式動(dòng)畫唱捣,它能夠?qū)σ恍傩宰鲋付ǖ淖远x動(dòng)畫两蟀,或者創(chuàng)建非線性動(dòng)畫,比如沿著任意一條曲線移動(dòng)震缭。 屬性動(dòng)畫 ...
    清風(fēng)沐沐閱讀 1,926評(píng)論 1 5