CAShapeLayer 屬性
@property(nullable) CGPathRef path;
// 用來定義呈現形狀的路徑 , 如果該路徑延伸到父Layer之外的范圍,
并不會自動被父Layer裁剪掉多出的部分,除非是正常的被遮蓋的情
況下才會被父Layer層自動裁剪掉
(注意點: 雖然這個路徑可以用來做動畫,當它的路徑被改變的時候會默認創建一個隱式動畫)
// 路徑填充顏色
@property(nullable) CGColorRef fillColor;
// 將顏色填充整個路徑, 為空則不填充, 默認屬性為黑色不透明
// 填充路徑時所使用的填充規則
@property(copy) NSString *fillRule;
// 外邊框顏色 - 支持隱式動畫
@property(nullable) CGColorRef strokeColor;
// 這些值定義了此次被用于繪畫的輪廓路徑(區域范圍)
這些值的范圍必須是[0,1]之間包含0和1這些在0和1之間的值會沿著路徑的輪廓被線性的插入進去 (支持隱式動畫)
@property CGFloat strokeStart; // 路徑起點
@property CGFloat strokeEnd; // 結束位置
@property CGFloat lineWidth; // 填充路徑的線寬 ,默認為1(支持隱式動畫)
// 路徑被填充的斜切角限制 默認為10(支持隱式動畫)
@property CGFloat miterLimit;
// 線兩頭樣式 方形/圓形/ 默認為
@property(copy) NSString *lineCap;
// 拐角樣式 選項為: `miter',`round'and`bevel'.Defaults to`miter'
斜切角/ 圓角/ 斜角 默認為 切角
@property(copy) NSString *lineJoin;
// 線樣式顯示為虛線
@property CGFloat lineDashPhase;
// 虛線模式 文檔是這樣寫的
The dash pattern (an array of NSNumbers) applied when creating the
*stroked version of the path. Defaults to nil
@property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;
例子:
#define PROGREESS_WIDTH 150 //圓直徑
#define PROGRESS_LINE_WIDTH 6 //弧線的寬度
CAShapeLayer *trackLayer = [CAShapeLayer layer];//創建一個track shape layer
trackLayer.frame = self.bounds;
[self.layer addSublayer:_trackLayer];
trackLayer.fillColor = [[UIColor clearColor] CGColor];
trackLayer.strokeColor = [[UIColor lightGrayColor] CGColor];//指定path的渲染顏色
trackLayer.opacity = 0.25; // 設置自己的透明度
trackLayer.lineCap = kCALineCapRound; //指定線的邊緣是圓的
trackLayer.lineWidth = 5;//線的寬度
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(40, 40) radius:(PROGREESS_WIDTH-PROGRESS_LINE_WIDTH)/2 startAngle:degreesToRadians(-270) endAngle:degreesToRadians(30) clockwise:YES];//上面說明過了用來構建圓形
trackLayer.path =[path CGPath]; //把path傳遞給layer,然后layer會處理相應的渲染,整個邏輯和CoreGraph是一致的。
CAGradientLayer 屬性
// 定義每個漸變顏色的CGColorRef對象數組
@property(nullable, copy) NSArray *colors;
// 定義每個漸變對象漸變的位置區域,并且每個漸變對象的的值都在 [0 , 1]之間的NSNumber對象數組,而且每添加一個新的lacation位置區域對象, 對它所賦予的值都是呈單調增加的
@property(nullable, copy) NSArray<NSNumber *> *locations;
// 被畫入父Layer的空間位置的起始點和終點
@property CGPoint startPoint;
@property CGPoint endPoint;
// 設置類型之后,此種漸變將會被繪制, 目前僅支持 axial 漸變類型(默認值)
@property(copy) NSString *type;
#使用示例
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0, 0, self.frame.size.width/2, self.frame.size.height);
[gradientLayer setColors:[NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor],(id)[[UIColor blueColor] CGColor], nil]]; // 設置顏色,系統自動轉換為CGColorRef 對象
[gradientLayer setLocations:@[@0.5,@0.9,@1 ]]; //每個漸變的區間范圍
[gradientLayer setStartPoint:CGPointMake(1, 1)]; // 起始點
[gradientLayer setEndPoint:CGPointMake(5, 5)]; // 終點
[self.layer addSublayer:gradientLayer1];
PS: 記錄一下,剛剛開始研究。 有不對的地方望指正。