iOS學習:CAShapeLayer與DrawRect對比,與UIBezierPath畫圖形


使用CAShapeLayer有以下一些優點

  • 渲染快速。CAShapeLayer使用了硬件加速,繪制同一圖形會比用Core Graphics快很多。

  • 高效使用內存。一個CAShapeLayer不需要像普通CALayer一樣創建一個寄宿圖形,所以無論有多大,都不會占用太多的內存。

  • 不會被圖層邊界剪裁掉。一個CAShapeLayer可以在邊界之外繪制。你的圖層路徑不會像在使用Core Graphics的普通CALayer一樣被剪裁掉。

  • 不會出現像素化。當你給CAShapeLayer做3D變換時,它不像一個有寄宿圖的普通圖層一樣變得像素化。

關於CAShapeLayer和DrawRect的比較

  • CAShapeLayer繼承自CALayer,因此,可使用CALayer的所有屬性。但是,CAShapeLayer需要和貝塞爾曲線配合使用才有意義。

  • -(void)drawRect:(CGRect)rect{} 只是一個方法而已,是UIView的方法,重寫此方法可以完成我們的繪制圖形功能。

  • DrawRect:DrawRect屬於CoreGraphic框架,占用CPU,消耗性能大。

  • CAShapeLayer:CAShapeLayer屬於CoreAnimation框架,通過GPU來渲染圖形,節省性能。動畫渲染直接提交給手機GPU,不消耗內

CAShapeLayer與UIBezierPath的關系

  • CAShapeLayer中shape代表形狀的意思,所以需要形狀才能生效。

  • 貝塞爾曲線可以創建基於矢量的路徑,而UIBezierPath類是對CGPathRef的封裝。

  • 貝塞爾曲線給CAShapeLayer提供路徑,CAShapeLayer在提供的路徑中進行渲染。路徑會閉環,所以繪制出了Shape。

  • 用於CAShapeLayer的貝塞爾曲線作為path,其path是一個首尾相連接的閉環曲線,即使該貝塞爾曲線不是一個閉環的曲線。

CAShapeLayer與CALayer

  • 普通CALayer在被初始化的時候是需要給一個frame的值的,這個frame值一般都與給定view的bounds值一致,它本身是有形狀的,而且是矩形。

  • CAShapeLayer初始化時也需要指定frame值,但它本身沒有形狀,它的形狀來源於其屬性path

  • CAShapeLayer有不同於CALayer的屬性,它從CALayer繼承而來的屬性在繪制時是不起作用的。 

CAShapeLayer有着幾點很重要

  • CAShapeLayer依附於一個給定的path,必須給與path,而且,即使path不完整也會自動首尾相接

  • CAShapeLayer屬性:strokeStart以及strokeEnd代表着在這個path中所占用的百分比。

  • CAShapeLayer動畫僅僅限於沿着邊緣的動畫效果,它實現不了填充效果。

CAShapeLayer對象屬性列表

屬性名 描述
path CGPathRef 對象,圖形邊線路徑
lineWidth 邊線的寬度
strokeColor 邊線的顏色
lineDashPattern

設置邊線的樣式,默認為實線,該數組為一個NSNumber數組,數組中的數值依次表示虛線中,單個線的長度,和空白的長度,

如:數組@[2,2,3,4] 表示 有長度為2的線,長度為2的空白,長度為3的線,長度為4的空白 不斷循環后組成的虛線。

如圖:lineDashPatttern

lineDashPhase 邊線樣式的起始位置,即,如果lineDashPattern設置為@[2,2,3,4],lineDashPhase即為第一個長度為2的線的起始位置
lineCap 線終點的樣式,默認 kCALineCapButt kCALineCapButt kCAlineCapRound kCAlineCapRound kCALineCapSquare kCALineCapSquare
lineJoin 線拐點處的樣式,默認 kCALineJoinMiter kCALineJoinMite kCALineJoinRound kCALineJoinRound kCALineJoinBevel kCALineJoinBeve
strokeStart strokeEnd CGFloat類型,[0,1] 表示畫邊線的起點和終點(即在路徑上的百分比)
fillColor CGColorRef對象,圖形填充色,默認為黑色


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM