UIBezierPath 基础方法属性的全面介绍

UIBezierPath是Core Graphics中用于创建矢量图形的类,可构建各种形状如椭圆、矩形等。本文介绍了其属性如lineWidth、lineCapStyle等,创建实例的方法,添加路径的技巧,虚线路径的实现,以及如何与CAShapeLayer结合使用进行填充和描边。同时,文章提供多个示例代码和图解帮助理解。
摘要由CSDN通过智能技术生成

UIKit中的UIBezierPath是Core Graphics框架关于path的一个封装。可以创建基于矢量的路径,例如椭圆或者矩形,或者有多个直线和曲线段组成的形状.

本文首次发布于 UIBezierPath 全面介绍, 作者余东洋,转载请保留原文链接.

属性:

  • lineWidth:线宽属性定义了 UIBezierPath 对象中绘制的曲线规格. 默认为: 1.0
  • lineCapStyle:应用于曲线的终点和起点. 该属性在一个闭合子路经中是无效果的. 默认为: kCGLineCapButt

枚举值:

  typedef CF_ENUM(int32_t, CGLineCap) {
    kCGLineCapButt,
    kCGLineCapRound,
    kCGLineCapSquare
};

对应样式:

  • lineJoinStyle:曲线连接点的样式.

枚举值:

  typedef CF_ENUM(int32_t, CGLineJoin) {
    kCGLineJoinMiter,
    kCGLineJoinRound,
    kCGLineJoinBevel
};

对应样式:

  • miterLimit:两条线交汇处内角和外角之间的最大距离, 仅当连接点样式为 kCGLineJoinMiter时生效.
图解:

  • flatness:渲染精度(表示真实曲线的点和渲染曲线的点的最大允许距离)。值越小,精度越高。default:0.6。
  • usesEvenOddFillRule:是否使用基偶填充规则。两种规则的详细介绍
 设置为 YES, 则路径将会使用 基偶规则 (even-odd) 进行填充.
 设置为 NO,  则路径将会使用 非零规则 (non-zero) 规则进行填充.
  • CGPath:一个不可变的 CGPathRef 对象
他可以传入 CoreGraphics 提供的函数中你可以是用 CoreGraphics 框架提供的方法创建一个路径, 并给这个属性赋值, 当时设置了一个新的路径后, 这个将会对你给出的路径对象进行 Copy 操作
  • currentPoint:下一条绘制的直线或曲线的起始点。如果当前路径为空, 那么该属性的值将会是 CGPointZero
  • bounds:路径覆盖的矩形区域。该属性描述的是一个能够完全包含路径中所有点的一个最小的矩形区域. 该区域包含二次贝塞尔曲线和三次贝塞尔曲线的控制点.
  • empty:路径是否为空。 <注>: 就算你仅仅调用了 moveToPoint 方法那么当前路径也被看做不为空.

创建实例对象:

  • ​ 创建
+ (instancetype) bezierPath;
  • by 矩形
/**
  * 该方法将会创建一个闭合路径, 起始点是 rect 参数的的 origin, 并且按照顺时针方向添加直线, 最终形成矩形
  * @param rect:   矩形路径的 Frame
  */
+ (instancetype)bezierPathWithRect:(CGRect)rect;
  • by 椭圆
/**
  * 该方法将会创建一个闭合路径,  该方法会通过顺时针的绘制贝塞尔曲线, 绘制出一个近似椭圆的形状. 如果 rect 参数指定了一个矩形, 那么该 UIBezierPath 对象将会描述一个圆形.
  * @param rect:   矩形路径的 Frame
  */
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;
  • by 圆角矩形:
/**
  * 该方法将会创建一个闭合路径,  该方法会顺时针方向连续绘制直线和曲线.  当 rect 为正方形时且 cornerRadius 等于边长一半时, 则该方法会描述一个圆形路径.
  * @param rect:   矩形路径的 Frame
  * @param cornerRadius:   矩形的圆角半径
  */
+ (instancetype) bezierPathWithRoundedRect:(CGRect)rect 
                              cornerRadius:(CGFloat)cornerRadius;

可以指定矩形的哪个角为圆角:

/**
  * 该方法将会创建一个闭合路径,  该方法会顺时针方向连续绘制直线和曲线.  
  * @param rect:   矩形路径的 Frame
  * @param corners:   UIRectCorner 枚举类型, 指定矩形的哪个角变为圆角
  * @param cornerRadii:   矩形的圆角半径
  */
+ (instancetype) bezierPathWithRoundedRect:(CGRect)rect 
                         byRoundingCorners:(UIRectCorner)corners
                               cornerRadii:(CGSize)cornerRadii;
  • by 圆弧
/**
  * 该方法会创建出一个开放路径, 创建出来的圆弧是圆的一部分. 在默认的坐标系统中, 开始角度 和 结束角度 都是基于单位圆的(看下面这张图). 调用这个方法之后, currentPoint 将会设置为圆弧的结束点.
  * 举例来说: 指定其实角度为0, 指定结束角度为π, 设置 clockwise 属性为 YES, 将会绘制出圆的下半部分.
  * 然而当我们不修改起始角度 和 结束角度, 我们仅仅将 clockwise 角度设置为 NO, 则会绘制出来一个圆的上半部分.
  * @param center:   圆心
  * @param radius: 半径
  * @param startAngle:   起始角度
  * @param endAngle:   结束角度
  * @param clockwise:   是否顺时针绘制
  */
+ (instancetype) bezierPathWithArcCenter:(CGPoint)center 
                                  radius:(CGFloat)radius 
                              startAngle:(CGFloat)startAngle 
                                endAngle:(CGFloat)endAngle 
                               clockwise:(BOOL)clockwise;

)

  • by CGPath
+ (instancetype) bezier
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值