CALayer和核心動畫

CALayer和核心動畫

CALayer和UIView(CA框架)

  1. CALayer是View內(nèi)的圖層,現(xiàn)實圖案等內(nèi)容其實在這里面.(效率更快,不耗CUP)
  2. UIView只負責監(jiān)聽和點擊事件

CALayer的基本屬性

首先CA開頭的類,是屬于CG框架,UI屬性都要進行類型轉(zhuǎn)換.

  1. position和bounds(圖層建議使用bounds,不使用frame)位置和大小
  2. contents內(nèi)容(可顯示圖片,注意類型轉(zhuǎn)換為.CGImage.

redView.layer.contents = (__bridge id _Nullable)([UIImage imageNamed:@"CALayer2"].CGImage);

  1. backgroundColor背景色
  2. border邊框(邊框顏色borderColor,邊框?qū)挾萣orderWidth)
  3. shadow陰影,四個屬(shadowColor陰影顏色,shadowOffset陰影偏移量,shadowRadius高斯半徑)一起出現(xiàn)才能顯示,且陰影不透明度(shadowOpacity)要為1(默認為0).
  4. ** cornerRadius (邊角弧度), maskToBounds 是否裁剪成對存在**
  5. ** opacity ** 不透明度
  6. ** transform **仿射變換

只有l(wèi)ayer下核心動畫是假象,位置不發(fā)生改變.layer的transform位置也是發(fā)生改變的.

單獨創(chuàng)建Layer顯示

Layer特點:自帶隱式動畫,跟Layer除外,但可以手動關閉:

  1. 開始事物
  2. 設置行為不實現(xiàn)
  3. 寫你要實現(xiàn)的動畫
  4. 提交事務
 //開啟事物
// [CATransaction begin];
 //設置事物為不實現(xiàn)行為
// [CATransaction setDisableActions:YES];
 self.layer.position = CGPointMake(100, 400);
 //提交事物
// [CATransaction commit];```



1. 創(chuàng)建CALayer對象.
2. 設置Layer對象的屬性(使我們能看見)
3. 添加到父Layer中
``` [self.view.layer addSublayer:layer]; ```

#### transform屬性(仿射變換)

//旋轉(zhuǎn)(3D),理解3d旋轉(zhuǎn) ,在Z軸上旋轉(zhuǎn)常見,常用)
self.layer.transform = CATransform3DRotate(self.layer.transform, M_PI_2, 0, 0, 1);
//縮放(只能在x,y軸縮放,因為Z軸平移縮放視覺無法發(fā)現(xiàn))
self.layer.transform = CATransform3DScale(self.layer.transform, 0.8, 0.8, 1);
//平移(只能在x,y軸縮放,因為Z軸平移縮放視覺無法發(fā)現(xiàn))
self.layer.transform = CATransform3DTranslate(self.layer.transform, 10, 10, 0);


#### Layer時鐘動畫
知識點1:anchorPoint錨點和position位置,之間的關系
anchorPoint錨點(定點),范圍(0~1)決定Layer以錨點比例存在的位置,0,0在左下,默認在中心,0.5,0.5.


知識點2:CADisplayLink刷幀定時器,每秒刷新頻率60次.

CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"position"];
KeyPath參數(shù)transform.rotation 就是旋轉(zhuǎn)關鍵字

CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(move)];
[link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];


知識點3:根據(jù)日歷顯示當前時間
1. 獲取時間對象(NSDate)
2. 獲取當前日歷對象( NSCalendar )
3. 根據(jù)日歷獲取當前秒數(shù)
>  NSInteger second = [calender component:NSCalendarUnitSecond fromDate:date]; 


1. 通過圖層顯示時針
2. 裁剪
3. 制作秒針(修改錨點位置)
4. 設置刷幀定時器(調(diào)用方法)
5. 方法內(nèi)實現(xiàn)秒針,旋轉(zhuǎn).

Layer的核心動畫(真實位置不發(fā)生改變).

動畫設置代理(隱式代理,不用遵守代理協(xié)議,這個協(xié)議作為代理的分類了)

 > CABasicAnimation 基本動畫,可以實現(xiàn)平移翻轉(zhuǎn),縮放的動畫

 > CAKeyframeAnimation 關鍵幀動畫,通過幀的形式播放動畫,可以有多個點 values屬性

 > CAAnimationGroup 組動畫,內(nèi)部可以有多個動畫為一組播放.animations 屬性

>   CATransition 轉(zhuǎn)場動畫
動畫的不返回屬性
basic.removedOnCompletion = NO;
basic.fillMode = 

1. 轉(zhuǎn)場動畫需要手勢storyBoard拖入輕掃手勢.(需要幾個拖幾個手勢對象),加入到View的手勢中
2. 判斷手勢方向,顯示圖片內(nèi)容
3. 創(chuàng)建轉(zhuǎn)場動畫

 > //設置屬性 
 transition.type = kCATransitionFade;//轉(zhuǎn)場方式
 transition.subtype = kCATransitionFromRight;那個方向顯示轉(zhuǎn)場方式.
4. 加入到圖層Layer中

#### 小畫板案例
1. 搭建界面
2. 先畫單線
         1. touchBegin取出起始點,繪制路徑,保存路徑(屬性接收touchMove中要用)
         2. touchMove中添加線條.重繪
         3. drawRect系統(tǒng)方法中渲染.
3. 畫多線:思路,多線就需要保存多組路徑,且首尾不想連.所以需要路徑數(shù)組
         1. 創(chuàng)建路徑可變數(shù)組(記住實例化,可懶加載,也可awakeNIb中寫.
         2. 將起始點路徑加入到這個數(shù)組中(touchBegin),根絕這個路徑添加線
         3. 改變單條路徑渲染為遍歷數(shù)組渲染.
3. 改變線的顏色,粗細
         1. 同過slider的的值傳遞到View中(屬性),更改線粗為屬性值
         2. 傳遞點擊按鈕的背景顏色到內(nèi)部.內(nèi)部定以UIColor屬性,但是UIBezier內(nèi)沒有線的顏色屬性(怎么給這個路徑對象這個屬性呢??直接創(chuàng)建一個類繼承UIBezier,我們在內(nèi)部給他定義這個UIColor屬性,更改路徑為你自定義的這個類,給他UIColor屬性設置為外界傳進來的顏色),給你的每個路徑設置顏色.
4. 實現(xiàn)各個按鈕的點擊事件(記住原則控制器不關心內(nèi)部實現(xiàn),自己的事情自己做,他只負責調(diào)用方法.
          1. 清除按鈕清除集合中的路徑
          2. 返回:清除上一個元素
          3. 擦除:用畫板的背景色在繪制這個顏色覆蓋原來的顏色
          4. 保存圖片
                  - 開啟圖片上下文 UIGraphicsBeginImageContextWithOptions(self.myPaintView.bounds.size, NO, 0); 
                  - 獲取當前上下文,因為截屏需要獲取上下文(整個就不用了) CGContextRef ctx = UIGraphicsGetCurrentContext(); 
                  - 截圖 [self.myPaintView.layer renderInContext:ctx]; 
                  - 獲取截圖 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
                  - 關閉上下文 UIGraphicsEndImageContext(); 
                  - 保存到相冊 UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil); 
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遇骑,一起剝皮案震驚了整個濱河市杭隙,隨后出現(xiàn)的幾起案子凄诞,更是在濱河造成了極大的恐慌酝豪,老刑警劉巖娶吞,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殖熟,死亡現(xiàn)場離奇詭異挥萌,居然都是意外死亡,警方通過查閱死者的電腦和手機亡问,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門官紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人州藕,你說我怎么就攤上這事束世。” “怎么了床玻?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵毁涉,是天一觀的道長。 經(jīng)常有香客問我笨枯,道長薪丁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任馅精,我火速辦了婚禮严嗜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洲敢。我一直安慰自己漫玄,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布压彭。 她就那樣靜靜地躺著睦优,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壮不。 梳的紋絲不亂的頭發(fā)上汗盘,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音询一,去河邊找鬼隐孽。 笑死,一個胖子當著我的面吹牛健蕊,可吹牛的內(nèi)容都是我干的菱阵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缩功,長吁一口氣:“原來是場噩夢啊……” “哼晴及!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫡锌,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虑稼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后势木,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體动雹,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年跟压,在試婚紗的時候發(fā)現(xiàn)自己被綠了胰蝠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡震蒋,死狀恐怖茸塞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情查剖,我是刑警寧澤钾虐,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站笋庄,受9級特大地震影響效扫,放射性物質(zhì)發(fā)生泄漏倔监。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一菌仁、第九天 我趴在偏房一處隱蔽的房頂上張望浩习。 院中可真熱鬧,春花似錦济丘、人聲如沸谱秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疟赊。三九已至,卻和暖如春峡碉,著一層夾襖步出監(jiān)牢的瞬間近哟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工鲫寄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留椅挣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓塔拳,卻偏偏與公主長得像鼠证,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靠抑,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

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

  • 在iOS中隨處都可以看到絢麗的動畫效果量九,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌颂碧。在這里你可以看...
    每天刷兩次牙閱讀 8,489評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果荠列,實現(xiàn)這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌载城。在這里你可以看...
    F麥子閱讀 5,111評論 5 13
  • CALayer - 在iOS中肌似,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕诉瓦、一個文本標簽川队、一個文本...
    Hevin_Chen閱讀 1,140評論 0 10
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫睬澡,幀動畫固额,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,097評論 1 23
  • 轉(zhuǎn)載:http://www.cnblogs.com/jingdizhiwa/p/5601240.html 1.ge...
    F麥子閱讀 1,544評論 0 1