(1)1,CAShapeLayer繼承自CALayer溪王,可使用CALayer的所有屬性
? ? ? ? ? 2,CAShapeLayer需要和貝塞爾曲線配合使用才有意義。
(2)關(guān)于CAShapeLayer和DrawRect的比較
? ? ? ? ?DrawRect:DrawRect屬于CoreGraphic框架睦疫,占用CPU,消耗性能大
? ? ? ? ?CAShapeLayer:CAShapeLayer屬于CoreAnimation框架鞭呕,通過(guò)GPU來(lái)渲染圖形笼痛,節(jié)省性能。動(dòng)畫渲染直接提交給手機(jī)GPU琅拌,不消耗內(nèi)存。gpu是圖像處理器摘刑。
(3)貝塞爾曲線與CAShapeLayer的關(guān)系
? ? ? 1进宝,CAShapeLayer中shape代表形狀的意思,所以需要形狀才能生效
? ? ?2枷恕,貝塞爾曲線可以創(chuàng)建基于矢量的路徑
? ? ? 3党晋,貝塞爾曲線給CAShapeLayer提供路徑,CAShapeLayer在提供的路徑中進(jìn)行渲染。路徑會(huì)閉環(huán)未玻,所以繪制出了Shape
? ? 4灾而,用于CAShapeLayer的貝塞爾曲線作為Path,其path是一個(gè)首尾相接的閉環(huán)的曲線扳剿,即使該貝塞爾曲線不是一個(gè)閉環(huán)的曲線
? ? 5旁趟,畫出一個(gè)圓代碼
//創(chuàng)建出CAShapeLayer
self.shapeLayer = [CAShapeLayer layer];
self.shapeLayer.frame = CGRectMake(0, 0, 100, 100);
//設(shè)置shapeLayer的尺寸和位置 一般和它顯示的view bounds 一樣
self.shapeLayer.position = self.view.center;
self.shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充顏色為ClearColor
//設(shè)置線條的寬度和顏色
self.shapeLayer.lineWidth = 1.0f;
self.shapeLayer.strokeColor = [UIColor redColor].CGColor;
//創(chuàng)建出圓形貝塞爾曲線
UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 50, 50)];
//讓貝塞爾曲線與CAShapeLayer產(chǎn)生聯(lián)系
self.shapeLayer.path = circlePath.CGPath;
//添加并顯示
[self.view.layer addSublayer:self.shapeLayer];}
? ?6,圓形加載圖