• 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对象,图形填充色,默认为黑色
  • 相关阅读:
    XHR——XMLHttpRequest对象
    原生JS弹出层详解,从简单到复杂
    php面向对象(OOP)编程完全教程
    css hack
    Ajax+php 详细分析 (没完整)
    Zend Studio 12 生成 WSDL
    PHP WebService/Soap接口生成方法。
    php soap客户端调试实例及调试
    简单数据结构之栈模拟
    经典算法之约瑟夫问题
  • 原文地址:https://www.cnblogs.com/chrisbin/p/6391933.html
Copyright © 2020-2023  润新知