1> CALayer簡介
*PPT簡介
2>屬性和新建圖層
01-CALayer01-基本使用
掌握
怎么設置陰影:shadowOpacity,shadowRadius + 解釋圓角半徑 + 邊框 達到效果:太陽發光
比較特殊的View:UIImgeView + UIImageView圓角半徑 + 主層和contents + 裁剪 + 陰影無效,達到效果,圓形頭像
可以改變圖層的形變屬性:touchBegin
怎么旋轉圖層:給三維坐標系的點,與原點形成向量,繞著向量旋轉,加動畫演示旋轉效果
怎么利用KVC改變形變
KVC注意點:
1> 給對象的哪個屬性賦值,就寫到keyPath里面。
2> value的值一定是屬性的類型才行
如何快速二維旋轉:ketPath為transform.rotation
縮放注意:z軸不需要縮放,為1就好。
KVC的好處:利用KVC可以快速的進行二維旋轉和,寬,高同時縮放.
*講解順序 陰影 -> 圓角半徑 -> 邊框 -> -> UIImageView圓角半徑 ->transform -> KVC
02-CALayer02-新建圖層
掌握
怎么顯示自己的圖層,直接加到控制器view的圖層,還得設置位置和尺寸,背景。
怎么給layer設置圖片,設置contents:看頭文件,contents必須是CGImageRef,UIImage先轉CGImageRef在轉id。
為什么圖層要的圖片和顏色使用CoreGraphics框架,不直接用UIKit框架。PPT解釋CALayer的疑惑
圖層也可以顯示,為什么還要UIView,PPT解釋CALayer的選擇
*講解順序 創建圖層 -> 位置 -> 背景 -> 內容 -> CALayer疑惑 -> CALayer的選擇
3> 講解兩個非常重要的屬性position和anchorPoint錨點
掌握
什么是position
什么是anchorPoint,他的取值范圍,他在圖層的哪個位置,
*講解順序 PPT解釋 -> 注意點:0~1,1表示一個單位。 -> position設置圖層的位置 -> 一個圖層中很多點,哪個點移動到position.
4> 隱式動畫
03-CALayer03-隱式動畫
掌握:
只有非rootCalyer才有隱式動畫。
如何學習哪些屬性有隱式動畫,跳進CALayer頭文件,找animatable。
怎么演示隱式動畫,點擊屏幕就改變屬性。
怎么取消隱式動畫,每執行一個動畫,開啟一個事物CATransaction,只要setDisableActions等于YES就好
*講解順序 PPT解釋 -> 監聽控制器的點擊,點一下改變下屬性 -> 背景顏色,位置,邊框,圓角半徑
5> 時鐘-自定義圖層
程序思路:
* 了解時鐘由什么組成的,使用哪些控件。(UIImgeView,CALayer)
* 為什么不使用UIView,而使用CALayer,需要監聽事件嗎?
* 現實生活中秒針是怎么旋轉的,繞著時鐘的中點轉,PPT演示,拖一根秒針線條
* 在ios中默認是繞著中心點旋轉的,因為錨點默認在圖層的中點,要想繞著下邊中心點轉,需要改變圖層錨點的位置。
* 根據錨點,設置position坐標,為時鐘的中點。
* 思考秒針旋轉的角度,怎么知道當前秒針旋轉到哪,當前秒針旋轉的角度 = 當前秒數 * 每秒轉多少°。
1> 計算一秒轉多少°360*60=6
2> 獲取當前秒數,通過日歷對象,獲取日期組成成分 NSCalendar -> NSDateComponents -> 獲取當前秒數
* 每隔一秒,獲取最新秒數,更新時鐘。
* 分鐘一樣的做法
* 時鐘也一樣
1.每一分鐘,時鐘也需要旋轉,60分鐘 ->1小時 - >30°==》 每分鐘30/60.0一分鐘時針轉0.5°
* 把時針和秒針頭尾變尖,設置圓角半徑
6> 核心動畫01-CABasicAnimation
*PPT簡介
*Core Animation是直接作用在CALayer上的,并非UIView。
*Core Animation結構
*Core Animation 使用步驟
*代碼演示
* 創建CALayer
* touchBegin,點擊屏幕,做動畫
* 創建動畫,添加動畫到CALayer
* 怎樣執行動畫?執行動畫的本質是改變圖層的屬性。
* 告訴動畫執行怎樣的動畫?設置動畫屬性(position)
* 告訴動畫屬性怎么改變?設置動畫屬性值改變 toValue fromValue
* duration:動畫時長
* 動畫有反彈?取消反彈
1> 執行動畫完畢不要移除
2> 設置動畫填充模式,保持最新的位置。
* rotation:
三維旋轉:transform
二維旋轉:transform.rotation
* scale
* 設置圖層內容(心)
* tovalue:@0.5
* 總結CABasicAnimation只能在兩個值之間做動畫,怎么多個值做動畫,用CAKeyframeAnimation
7> CAKeyframeAnimation
* 面向view開發,拖一個view
* values:能多個值之間做動畫,按照順序做。
* path
* 動畫節奏(timingFunction)
* 代理
8> * 圖標抖動
* PPT分析,左邊旋轉右邊旋轉 -> keyPath(transform.rotation) -> values -> 有點瘸 -> PPT分析 -> values添加一個值
9> * CATransition
過度動畫又叫轉場動畫 -> type(轉場類型) -> subtype(方向) -> 動畫進度
注意:轉場動畫必須和過度代碼放在一塊,否則沒有效果
10> * CAAnimationGroup
同時進行多種動畫 -> 平移,旋轉,縮放 -> 取消反彈
11> * UIView封裝的動畫
* 什么時候用核心動畫,什么時候用UIView動畫
* 核心動畫的缺點:都是假象,不能真正改變圖層屬性的值
* 展示和真實的位置不同
* 如果改變位置就用UIView的動畫
* 轉場動畫就用核心動畫
* 為什么轉場用核心動畫?因為UIView的轉場動畫太少。
* 演示UIView的轉場動畫
* touchBegin,切換圖片
12> 轉盤
* 看素材分析控件(2個UIImgeView,1個按鈕)
* 自定義HMWheelView(處理轉盤功能,以后其他項目直接拷貝就好了)
* xib描述(界面固定,按鈕有兩種狀態的圖片)
* 添加按鈕,父控件是中間的那個UIImgeView,只有他需要旋轉。
* 在awakeFormNib添加,initWithCoder還沒連線。
* 按鈕的位置:PPT分析,所有按鈕的frame都一樣,但是根據不同的角標,旋轉不同的角度,相對上一個都旋轉30°。
1> 設置錨點:旋轉是繞著錨點旋轉的
2> 設置position
3> 設置尺寸
4> 形變,旋轉按鈕
* 按鈕選中的背景
* 監聽按鈕點擊,允許父控件交互。
* 裁剪大圖片
* CGImageCreateWithImageInRect(CGImageRef image, CGRect rect)
* image:裁剪的圖片 rect:裁剪的尺寸
* CGImageRef 是 像素,而我們傳的是點坐標,轉換坐標系
* 旋轉轉盤:不能用核心動畫
* 搞個定時器,每隔一段時間旋轉一點角度,一秒旋轉45°,每次旋轉45/60,因為一秒調用60次,那個方法
* 給外界提供開始旋轉和停止旋轉兩個方法
* 監聽開始旋轉按鈕
1> 不需要和用戶交互,用核心動畫
2> 快速旋轉的時候,暫停定時器,不需要同時旋轉,會有問題
* 旋轉完之后,需要處理的業務邏輯
1> 允許用戶交互
2> 選中按鈕回到最上面中間位置,只要旋轉按鈕才知道自己旋轉了多少,反向旋轉這么多角度就好了,用make,把之前的旋轉全部清空。
3>2秒后自動旋轉