CAShapeLayer 的基本使用
CAShapeLayer 簡介
1.CAShapeLayer 繼承于 CALayer, 可以使用 CALayer 的所有屬性值
2.CAShapeLayer 需要與貝塞爾曲線在一起使用才有意義
3.使用CAShapeLayer與貝塞爾曲線可以實現(xiàn)不在 view 的 drawRect 方法中繪制出我們想要的圖形
4.CAShapeLayer 屬于 CoreAnimation 框架,其動畫渲染是在 GPU 中,相對于 view 的 DrawRect 的方法,它使用的手機的 CPU 進行渲染,所以用CAShapeLayer 的效率極高,大大優(yōu)化手機性能
貝塞爾曲線與 CAShapeLayer 的關(guān)系
1.貝塞爾曲線創(chuàng)建矢量的路徑
2.貝塞爾曲線給CAShapeLayer 提供路徑,CAShapeLayer在提供的路徑中渲染,路徑閉環(huán),因此,路徑繪制出了Shape
3.用于CAShapeLayer的貝塞爾曲線作為 path , 其 path 是一個收尾相接的閉環(huán)的曲線,即使該貝塞爾曲線不是一個閉環(huán)的曲線
好啦,理論已經(jīng)了解了差不多,現(xiàn)在用兩者繪制幾種簡單圖形
1.繪制橢圓
//創(chuàng)建橢圓形的貝塞爾曲線
UIBezierPath *oval = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 100)];
//創(chuàng)建一個 CAShapeLayer
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame = CGRectMake(0, 0, 200, 100);
//禁止內(nèi)容顯示超出邊界
layer.masksToBounds = YES;
layer.position = self.view.center;
//顯示邊界值
layer.borderWidth = 1.f;
//CASHapeLayer 與 貝塞爾之間的 frame 互不干擾
//設(shè)置填充色
layer.fillColor = [UIColor redColor].CGColor;
//設(shè)置繪制色(邊框色)
layer.strokeColor = [UIColor purpleColor].CGColor;
//建立貝塞爾曲線與 CAShapeLayer 的關(guān)聯(lián)
layer.path = oval.CGPath;
//添加并且顯示
[self.view.layer addSublayer:layer];
2.繪制矩形?
其實只需要創(chuàng)建出矩形貝塞爾曲線,替換 shapeLayer 的 path 即可,同理圓形也是
//創(chuàng)建矩形貝塞爾曲線
UIBezierPath *rect = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 200, 100)];
//創(chuàng)建圓形貝塞爾曲線
UIBezierPath *circle = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)];