內容大綱:
CAShapeLayer簡介 貝塞爾曲線與CAShapeLayer的關系 strokeStart和strokeEnd 動畫 用CAShapeLayer實現進度條效果,以及更加復雜的效果
效果:
雖然說,直接更改另外創建的CALayer以及其子類,會觸發隱式動畫,但是直接更改CAShapeLayer的path的值,變化過程沒有漸變移動的效果,所以這裡就需要
使用核心動畫CABasicAnimation來幫忙實現,未使用核心動畫驗證效果在後面的"4、用CAShapeLayer實現進度條效果,以及更加復雜的效果"驗證了。
4、用於CAShapeLayer的貝塞爾曲線做為path,其path實一個首尾相接的閉環的曲線,即使該貝塞爾曲線不是一個閉環的曲線
圖2.png
如何建立貝塞爾曲線和CAShapeLayer的聯系:
屬性:path
UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0,0,200,100)];
shape.path = circle.CGPath;
屬性:fillColor 修改貝塞爾曲線的填充顏色
屬性:maskToBounds
二階貝塞爾曲線
三階貝塞爾曲線
四階貝塞爾曲線
五階貝塞爾曲線
然後是通過代碼直接體現貝塞爾曲線和CAShapeLayer之間的關系:
4、將strokeStart值設定成0,然後讓strokeEnd的值變化觸發隱式動畫
類:CAShapeLayer
屬性:
處理方法:
shapeLayer.strokeStart = valueOne < valueTwo ? valueOne : valueTwo;
shapeLayer.strokeStart = valueOne > valueTwo ? valueOne : valueTwo;
屬性:
然後為了能實現圓形進度條的效果:
效果就是:
將上面的strokeStart也設置,但是注意:strokeStart必須要小於strokeEnd,否則會不畫出線的情況。
圓形進度條動畫.gif

源碼下載地址:CircleProgress中的 CircleProgress源碼
直接更改path的結果,並沒有理想中的漸變過程,所以需要使用核心動畫:

綜合示例源碼請看:https://github.com/HeYang123456789/UIView
如果fillColors不設置成 [UIColor clearColor].CGColor就會有這樣的效果:

轉載原址:http://www.cnblogs.com/goodboy-heyang/p/5185575.html