核心動(dòng)畫(huà)擴(kuò)展(1)

鍵-值編碼擴(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)


CAAnimationCALayer的類(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)值。該CAAnimationCALayer的類(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)鍵路徑支持

CAAnimationCALayer的類(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ù)迁沫。。闷盔。弯洗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逢勾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌藐吮,老刑警劉巖溺拱,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異谣辞,居然都是意外死亡迫摔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)泥从,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)句占,“玉大人,你說(shuō)我怎么就攤上這事躯嫉∩春妫” “怎么了杨拐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)擂啥。 經(jīng)常有香客問(wèn)我哄陶,道長(zhǎng),這世上最難降的妖魔是什么哺壶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任屋吨,我火速辦了婚禮,結(jié)果婚禮上山宾,老公的妹妹穿的比我還像新娘至扰。我一直安慰自己,他們只是感情好资锰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布敢课。 她就那樣靜靜地躺著,像睡著了一般台妆。 火紅的嫁衣襯著肌膚如雪翎猛。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,906評(píng)論 1 290
  • 那天接剩,我揣著相機(jī)與錄音切厘,去河邊找鬼。 笑死懊缺,一個(gè)胖子當(dāng)著我的面吹牛疫稿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹃两,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼遗座,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了俊扳?” 一聲冷哼從身側(cè)響起途蒋,我...
    開(kāi)封第一講書(shū)人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎馋记,沒(méi)想到半個(gè)月后号坡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梯醒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年宽堆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茸习。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畜隶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情籽慢,我是刑警寧澤浸遗,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站嗡综,受9級(jí)特大地震影響乙帮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜极景,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一察净、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盼樟,春花似錦氢卡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至击碗,卻和暖如春筑悴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稍途。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工阁吝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人械拍。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓突勇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坷虑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甲馋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

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