CALayer和核心動畫

CALayer和核心動畫

CALayer和UIView(CA框架)

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

CALayer的基本屬性

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

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

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

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

只有layer下核心動畫是假象,位置不發生改變.layer的transform位置也是發生改變的.

單獨創建Layer顯示

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

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



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

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

//旋轉(3D),理解3d旋轉 ,在Z軸上旋轉常見,常用)
self.layer.transform = CATransform3DRotate(self.layer.transform, M_PI_2, 0, 0, 1);
//縮放(只能在x,y軸縮放,因為Z軸平移縮放視覺無法發現)
self.layer.transform = CATransform3DScale(self.layer.transform, 0.8, 0.8, 1);
//平移(只能在x,y軸縮放,因為Z軸平移縮放視覺無法發現)
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參數transform.rotation 就是旋轉關鍵字

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


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


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

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

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

 > CABasicAnimation 基本動畫,可以實現平移翻轉,縮放的動畫

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

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

>   CATransition 轉場動畫
動畫的不返回屬性
basic.removedOnCompletion = NO;
basic.fillMode = 

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

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

#### 小畫板案例
1. 搭建界面
2. 先畫單線
         1. touchBegin取出起始點,繪制路徑,保存路徑(屬性接收touchMove中要用)
         2. touchMove中添加線條.重繪
         3. drawRect系統方法中渲染.
3. 畫多線:思路,多線就需要保存多組路徑,且首尾不想連.所以需要路徑數組
         1. 創建路徑可變數組(記住實例化,可懶加載,也可awakeNIb中寫.
         2. 將起始點路徑加入到這個數組中(touchBegin),根絕這個路徑添加線
         3. 改變單條路徑渲染為遍歷數組渲染.
3. 改變線的顏色,粗細
         1. 同過slider的的值傳遞到View中(屬性),更改線粗為屬性值
         2. 傳遞點擊按鈕的背景顏色到內部.內部定以UIColor屬性,但是UIBezier內沒有線的顏色屬性(怎么給這個路徑對象這個屬性呢??直接創建一個類繼承UIBezier,我們在內部給他定義這個UIColor屬性,更改路徑為你自定義的這個類,給他UIColor屬性設置為外界傳進來的顏色),給你的每個路徑設置顏色.
4. 實現各個按鈕的點擊事件(記住原則控制器不關心內部實現,自己的事情自己做,他只負責調用方法.
          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); 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,572評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現這些動畫的過程并不復雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,141評論 5 13
  • CALayer - 在iOS中,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文本標簽、一個文本...
    Hevin_Chen閱讀 1,159評論 0 10
  • 在iOS實際開發中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉場動畫。 1.UIView...
    請叫我周小帥閱讀 3,159評論 1 23
  • 轉載:http://www.cnblogs.com/jingdizhiwa/p/5601240.html 1.ge...
    F麥子閱讀 1,587評論 0 1