標籤:
內容大綱:
- CAShapeLayer簡介
- 貝茲路徑與CAShapeLayer的關係
- strokeStart和strokeEnd 動畫
- 用CAShapeLayer實現進度條效果,以及更加複雜的效果
1、CAShapeLayer簡介
- 1、CAShapeLayer繼承自CALayer,可以使用CALayer的所有屬性值
- 2、CAShapeLayer需要與貝茲路徑配合使用才有意義
- 3、使用CAShapeLayer與貝茲路徑可以實現不在view的drawRect方法中畫出有一些想要的圖形
- 4、CAShapeLayer屬於CoreAnimation架構,其動畫渲染直接提交到手機的GPU當中,相較於view的drawRect方法使用CPU渲染而言,其效率極高,能大大最佳化記憶體使用量情況。
- 個人經驗:可以重寫UIView的子類中的drawRect來實現進度條效果,但是UIView的drawRect是用CPU渲染實現的,而使用CAShapeLayer效率更高,因為它用的是GPU渲染。
效果:雖然說,直接更改另外建立的CALayer以及其子類,會觸發隱式動畫,但是直接更改CAShapeLayer的path的值,變化過程沒有漸層移動的效果,所以這裡就需要使用核心動畫CABasicAnimation來幫忙實現,未使用核心動畫驗證效果在後面的"4、用CAShapeLayer實現進度條效果,以及更加複雜的效果"驗證了。2、貝茲路徑與CAShapeLayer的關係
一階貝茲路徑二階貝茲路徑三階貝茲路徑四階貝茲路徑五階貝茲路徑 然後是通過代碼直接體現貝茲路徑和CAShapeLayer之間的關係: 3、strokeStart與strokeEnd動畫
然後為了能實現圓形進度條的效果:效果就是: 將上面的strokeStart也設定,但是注意:strokeStart必須要小於strokeEnd,否則會不畫出線的情況。
4、用CAShapeLayer實現圓形進度條效果,以及更複雜綜合起來的動畫效果
圓形進度條動畫.gif
源碼:CircleProgress 中的 CircleProgress源碼
直接更改path的結果,並沒有理想中的漸層過程,所以需要使用核心動畫:
綜合樣本源碼請看:https://github.com/HeYang123456789/UIView
如果fillColors不設定成 [UIColor clearColor].CGColor就會有這樣的效果:
轉載原址:http://www.cnblogs.com/goodboy-heyang/p/5185575.html
iOS之UI--CAShapeLayer