iOS CALayer

相關(guān)資源

GitHub粒子發(fā)射和復(fù)制圖層示例
GitHub粘性控件示例
GitHub彈性動(dòng)畫
響應(yīng)者手勢(shì)分析
CAEmitter分析

簡(jiǎn)介

這是一個(gè)什么對(duì)象呢桶蛔,官方簡(jiǎn)述起是一個(gè)管理基于圖像內(nèi)容的對(duì)象假夺,并且允許你在內(nèi)容上執(zhí)行動(dòng)畫满葛。我們一直通俗的理解就是它的作用就是用于顯示的绊诲。在UIKit繼承樹中我們可以發(fā)現(xiàn)只有UIView中有l(wèi)ayer屬性夺颤。

層通常被用在對(duì)View的輔助處理祠肥,但也可以直接使用顯示內(nèi)容鸵闪。一個(gè)層的主要工作是管理您提供的可視化內(nèi)容,但層本身具有可設(shè)置的可視屬性概疆,如背景顏色逗威、邊框和陰影。除了管理視覺內(nèi)容外岔冀,該層還保存有關(guān)其內(nèi)容的幾何信息(如它的位置凯旭、大小和轉(zhuǎn)換),這些幾何信息決定著內(nèi)容在屏幕上的展現(xiàn)。一個(gè)layer對(duì)象通過遵守CAMediaTiming協(xié)議 封裝了時(shí)間罐呼、layer的節(jié)奏和它的動(dòng)畫鞠柄,因?yàn)镃AMediaTiming協(xié)議定義了層的定時(shí)信息。

如果圖層對(duì)象是由視圖創(chuàng)建的嫉柴,視圖通常會(huì)自動(dòng)將其作為層的代理厌杜,并且這種關(guān)系不應(yīng)該被強(qiáng)制改變。對(duì)于創(chuàng)建自己的層计螺,可以制定一個(gè)它的代理對(duì)象夯尽,可以使用該代理動(dòng)態(tài)地為層提供內(nèi)容,并執(zhí)行其他任務(wù)登馒。一層也有一個(gè)布局管理器對(duì)象(分配到的布局管理器的屬性)來管理子視圖的布局分開匙握。

基本注意點(diǎn)

  1. 對(duì)于非根層具有隱式動(dòng)畫(對(duì)于可動(dòng)畫的屬性)
  2. 對(duì)圖層的操作非常豐富,可查看屬性陈轿,設(shè)置各種效果
  3. 繼承自nsoject肺孤,不具有responder相應(yīng)的屬性
  4. layer.transform的類型是CATransform3D(QuartzCore框架),view.transform的類型是CGAffineTransform(CoreGraphics框架)济欢,對(duì)兩者的transform屬性操作會(huì)影響兩個(gè)的frame(兩個(gè)frame是同步的赠堵,view的frame決定它的responder范圍)。
  5. position屬性相當(dāng)于view.center(這兩個(gè)值經(jīng)測(cè)試是同步的)法褥,這兩個(gè)值得改變不僅可以通過直接設(shè)值茫叭,還可以通過重新設(shè)置frame重新調(diào)整其值(這種情況下要根據(jù)anchor值系統(tǒng)給出相應(yīng)的值)。
  6. anchorPoint 默認(rèn)是0.5半等,0.5 揍愁,改變transform 和frame不會(huì)影響它,只有通過設(shè)置anchorPoint屬性才會(huì)改變杀饵。
  7. 當(dāng)layer.tansform存在時(shí)莽囤,不要重新設(shè)置frame( do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead)。
  8. 做旋轉(zhuǎn)和縮放(相當(dāng)于改變bounds值)的時(shí)候會(huì)圍繞position(也就是view的center屬相)做調(diào)整切距,改變frame值朽缎。
    說明:這里的情況是UIKit層面的動(dòng)畫或者沒有動(dòng)畫處理情況。

核心動(dòng)畫 (這里扯一下CoreAnimation)

  1. UIView動(dòng)畫與核心動(dòng)畫的區(qū)別?
  • 核心動(dòng)畫只作用在layer.
  • 核心動(dòng)畫修改的值都是假像.它的真實(shí)位置沒有發(fā)生變化谜悟,不會(huì)改變layer的frame话肖、transform屬性.
  1. 什么時(shí)候用UIView動(dòng)畫什么時(shí)候用核心動(dòng)畫?
  • 當(dāng)需要與用戶進(jìn)行交互時(shí)用UIView,不需要與用戶進(jìn)行交互時(shí)兩個(gè)都可以.
  1. 什么情況用核心動(dòng)畫最多?
  • 轉(zhuǎn)場(chǎng)動(dòng)畫(UIView的轉(zhuǎn)場(chǎng)動(dòng)畫類型比較少).
  • 幀動(dòng)畫.
  • 動(dòng)畫組.

CALayer介紹

QuartzCore框架之中的一個(gè)重要的類,QuartzCore中另外一個(gè)重要的類就是CoreAnimation葡幸。這篇就來介紹一下CALayer的幾個(gè)重要的子類:

  1. CAGradientLayer
    漸變層在其背景色上繪制顏色漸變最筒,填充層的形狀(包括圓角)。
// 添加或者獲取需要漸變的顏色蔚叨,顏色的類型是CGColorRef床蜘,數(shù)組默認(rèn)是nil
@property(nullable, copy) NSArray *colors;
// 起始點(diǎn)不僅能夠決定漸變的起始點(diǎn)辙培,而且可以確定漸變方向
@property CGPoint startPoint;
@property CGPoint endPoint;
// 在起始點(diǎn)的基礎(chǔ)上確定每一個(gè)漸變站的位置
@property(nullable, copy) NSArray<NSNumber *> *locations;
  1. CAReplicatorLayer

CAReplocatorLayer是復(fù)制圖層,我們可以通過它邢锯,將其中的子layer進(jìn)行拷貝虏冻,并進(jìn)行一些差異處理。我們只需要對(duì)源圖層進(jìn)行處理(包括動(dòng)畫弹囚,形變,位移)领曼,在CAReplocatorLayer的作用下副本就會(huì)被原樣處理

//拷貝的次數(shù)(包括源圖層)
@property NSInteger instanceCount;
//是否開啟景深效果
@property BOOL preservesDepth;
//當(dāng)CAReplicatorLayer的子Layer層進(jìn)行動(dòng)畫的時(shí)候鸥鹉,拷貝的副本執(zhí)行動(dòng)畫的延時(shí)
@property CFTimeInterval instanceDelay;
//拷貝副本的3D變換
@property CATransform3D instanceTransform;
//拷貝副本的顏色變換
@property(nullable) CGColorRef instanceColor;
//每個(gè)拷貝副本的顏色偏移參數(shù)
  1. CAShapeLayer
    CAShapeLayer是圖形圖層,我們可以自定義這個(gè)層的形狀庶骄。
// 圖層形狀路徑   
@property(nullable) CGPathRef path;

//設(shè)置圖形的填充顏色
@property(nullable) CGColorRef fillColor;
/*
設(shè)置圖形的填充規(guī)則 選項(xiàng)如下:
非零填充
NSString *const kCAFillRuleNonZero;
奇偶填充
NSString *const kCAFillRuleEvenOdd;
*/
@property(copy) NSString *fillRule;

//設(shè)置Stroke線條顏色
@property(nullable) CGColorRef strokeColor;

//設(shè)置線條的起點(diǎn)與終點(diǎn) 0-1之間毁渗,默認(rèn)是0和1
@property CGFloat strokeStart;
@property CGFloat strokeEnd;

//設(shè)置線條寬度
@property CGFloat lineWidth;

//設(shè)置兩條線段相交時(shí)銳角斜面長度(斜接限制)
@property CGFloat miterLimit;

/*
設(shè)置線條首尾的外觀
可選如下
 NSString *const kCALineCapButt;無形狀
 NSString *const kCALineCapRound;圓形
 NSString *const kCALineCapSquare;方形
*/
@property(copy) NSString *lineCap;

/*
設(shè)置線段的鏈接方式
 NSString *const kCALineJoinMiter;棱角
 NSString *const kCALineJoinRound; 平滑
 NSString *const kCALineJoinBevel;折線
*/
@property(copy) NSString *lineJoin;

//設(shè)置從哪個(gè)階段開始,例如: layer.lineDashPhase = 5;
@property CGFloat lineDashPhase;

 //stroke線條的屬性单刁,畫虛線(lineDash) 
  // 例如:layer.lineDashPattern = @[@05,@10,@2]; 表示實(shí)(5)  虛(10)實(shí)(2)循環(huán)劃線灸异。
@property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;

簡(jiǎn)單應(yīng)用:粘性控件GitHub地址

  1. CATextLayer
    文本層提供簡(jiǎn)單的文本布局和普通字符串或者屬性字符串的渲染,第一行與圖層的頂部對(duì)齊羔飞。

//渲染的文字字符串
@property(nullable, copy) id string;
//設(shè)置字體
@property(nullable) CFTypeRef font;
//設(shè)置字號(hào)
@property CGFloat fontSize;
//設(shè)置文字顏色
@property(nullable) CGColorRef foregroundColor;
//是否換行
@property(getter=isWrapped) BOOL wrapped;

//
無截?cái)嗄J?br> NSString * const kCATruncationNone;
截?cái)嗲安糠?br> NSString * const kCATruncationStart;
截?cái)嗪蟛糠?br> NSString * const kCATruncationEnd;
截?cái)嘀虚g
NSString * const kCATruncationMiddle;
@property(copy) NSString *truncationMode;

//
設(shè)置文字對(duì)齊模式
NSString * const kCAAlignmentNatural;
NSString * const kCAAlignmentLeft;
NSString * const kCAAlignmentRight;
NSString * const kCAAlignmentCenter;
NSString * const kCAAlignmentJustified;
@property(copy) NSString *alignmentMode;

  1. CAEmitterLayer
    CAEmitterLayer是CoreAnimation框架中的粒子發(fā)射層肺樟。
    請(qǐng)看相關(guān)鏈接:CAEmitter分析
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市逻淌,隨后出現(xiàn)的幾起案子么伯,更是在濱河造成了極大的恐慌,老刑警劉巖卡儒,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件田柔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡骨望,警方通過查閱死者的電腦和手機(jī)硬爆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擎鸠,“玉大人缀磕,你說我怎么就攤上這事×庸猓” “怎么了虐骑?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赎线。 經(jīng)常有香客問我廷没,道長,這世上最難降的妖魔是什么垂寥? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任颠黎,我火速辦了婚禮另锋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狭归。我一直安慰自己夭坪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布过椎。 她就那樣靜靜地躺著室梅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疚宇。 梳的紋絲不亂的頭發(fā)上亡鼠,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音敷待,去河邊找鬼间涵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛榜揖,可吹牛的內(nèi)容都是我干的勾哩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼举哟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼思劳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妨猩,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤敢艰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后册赛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠导,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年森瘪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牡属。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扼睬,死狀恐怖逮栅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窗宇,我是刑警寧澤措伐,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站军俊,受9級(jí)特大地震影響侥加,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粪躬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一担败、第九天 我趴在偏房一處隱蔽的房頂上張望昔穴。 院中可真熱鬧,春花似錦提前、人聲如沸吗货。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宙搬。三九已至,卻和暖如春拓哺,著一層夾襖步出監(jiān)牢的瞬間勇垛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工拓售, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镶奉。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓础淤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哨苛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸽凶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜建峭,今天將帶大家一窺ios動(dòng)畫全貌玻侥。在這里你可以看...
    每天刷兩次牙閱讀 8,471評(píng)論 6 30
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果,實(shí)現(xiàn)這些動(dòng)畫的過程并不復(fù)雜亿蒸,今天將帶大家一窺iOS動(dòng)畫全貌凑兰。在這里你可以看...
    F麥子閱讀 5,104評(píng)論 5 13
  • 什么是CALayer 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個(gè)按鈕、一個(gè)文本標(biāo)簽边锁、 一個(gè)...
    嗶哩嗶哩智能喵閱讀 318評(píng)論 0 0
  • CALayer簡(jiǎn)介 在iOS中姑食,你能看得見摸得著的東西基本上都是UIView,比如一個(gè)按鈕茅坛、一個(gè)文本標(biāo)簽音半、一個(gè)文本...
    LiYaoPeng閱讀 492評(píng)論 0 4
  • 姓名:李有連 企業(yè)名稱:東莞耀升機(jī)電有限公司 組別:AT努力組 【日精進(jìn)打卡第18天】 【知~學(xué)習(xí)】 誦讀《六項(xiàng)精...
    李有連閱讀 153評(píng)論 0 0