iOS程序猿之UIBezierPath类属性和方法(画图路径)

UIBezierPath

UIBezierPath类可以定义一个由直线和曲线线段的路径,呈现在自定义视图上.可以定义简单的形状,如矩形,椭圆形,圆弧或者复杂多边形等.定义形状后,就可以使用这个类的其他方法来呈现当前当前绘制上下文的路径.

创建UIBezierPath对象

/**
 *  创建并返回一个UIBezierPath对象。
 *
 *  @return 一个新的空路径对象。
 */
+ (instancetype)bezierPath;
/**
 *  创建并返回一个用矩形路径初始化的UIBezierPath对象。
 *
 *  @param rect 矩形路径
 *
 *  @return 与矩形路径的新路径对象
 */
+ (instancetype)bezierPathWithRect:(CGRect)rect;
/**
 *  创建并返回一个在指定的矩形内切一个椭圆形的路径初始化的UIBezierPath对象
 *
 *  @param rect 矩形,会内切一个椭圆
 *
 *  @return 与椭圆形路径一致的新路径对象。
 */
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;
/**
 *  创建并返回一个采用了圆角矩形路径初始化的UIBezierPath对象。
 *
 *  @param rect         矩形路径
 *  @param cornerRadius 圆角半径
 *
 *  @return 与圆角矩形路径一致的对象。
 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;
/**
 *  创建并返回一个采用了圆角矩形路径初始化的UIBezierPath采用了圆角矩形路径初始化的对象。(圆角位置可选)
 *
 *  @param rect        矩形路径
 *  @param corners     圆角的角标(顺时针方向), 取值参考下面的UIRectCorner
 *  @param cornerRadii 圆角半径
 *
 *  @return 与圆角矩形路径一致的对象。
 */
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;
/**
 *  enum UIRectCorner {
 *  UIRectCornerTopLeft      =  1  <<  0 , // 矩形左上角
 *  UIRectCornerTopRight     =  1  <<  1 , // 矩形的右上角
 *  UIRectCornerBottomLeft   =  1  <<  2 , // 矩形的左下角
 *  UIRectCornerBottomRight  =  1  <<  3 , // 矩形的右下角
 *  UIRectCornerAllCorners   =  ~ 0 // 矩形的各个角
 *  };
 */
/**
 *  创建并返回一个带有圆弧初始化的UIBezierPath对象。
 *
 *  @param center     指定圆的中心点(在当前坐标中)用于定义弧
 *  @param radius     指定用于定义圆弧的圆的半径
 *  @param startAngle 指定弧的起始角(以弧度测量)
 *  @param endAngle   指定圆弧的结束角(以弧度测量)
 *  @param clockwise  绘制圆弧的方向 (YES表示顺时针)
 *
 *  @return 与指定弧路径一致的对象
 */
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
/**
 *  创建并返回一个指定路径信息的UIBezierPath对象
 *
 *  @param CGPath 路径
 *
 *  @return 与指定路径一致的对象
 */
+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;
/**
 *  创建并返回一个相反方向具有相同路径形状的对象
 *
 *  @return 在相反方向具有相同路径的形状的新路径的对象
 */
- (UIBezierPath *)bezierPathByReversingPath;

构建路径

/**
 *  第一个点的位置
 *
 *  @param point 起始点的坐标
 */
- (void)moveToPoint:(CGPoint)point;
/**
 *  添加直线的路径
 *
 *  @param point 线段的终点坐标
 */
- (void)addLineToPoint:(CGPoint)point;
/**
 *  添加圆弧路径
 *
 *  @param center     圆弧的圆点坐标
 *  @param radius     圆弧半径
 *  @param startAngle 圆弧起始角
 *  @param endAngle   圆弧结束角
 *  @param clockwise  绘制方向(YES顺时针)
 */
- (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;
/**
 *  添加一个三次贝塞尔曲线路径
 *
 *  @param endPoint      曲线的终点坐标
 *  @param controlPoint1 第一个控制点
 *  @param controlPoint2 第二个控制点
 */
- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;
/**
 *  添加一个二次贝塞尔曲线路径
 *
 *  @param endPoint     曲线的终点坐标
 *  @param controlPoint 控制点坐标
 */
- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;
/**
 *  关闭路径
 */
- (void)closePath;

/**
 *  移除所有的子路径
 */
- (void)removeAllPoints;

/**
 *  将bezierPath和当前对象添加到一起???
 *
 *  @param bezierPath 待添加的路径
 */
- (void)appendPath:(UIBezierPath *)bezierPath;
/**
 *  设置路径线路的图案
 *
 *  @param pattern 线段和间隙的长度???
 *  @param count   图案的值???
 *  @param phase   在该偏移开始绘制图案,在沿虚线图案点测量???
 */
- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase;
/**
 *  获取路径线路的图案
 *
 *  @param pattern   线段和间隙的长度???
 *  @param count   图案的值???
 *  @param phase   在该偏移开始绘制图案,在沿虚线图案点测量???
 */
- (void)getLineDash:(CGFloat *)pattern count:(NSInteger *)count phase:(CGFloat *)phase;

绘制路径

/**
 *  填充当前路径包围的区域
 */
- (void)fill;
/**
 *  用指定的混合模式和透明度来填充路径包围的区域
 *
 *  @param blendMode 混合模式,枚举值
 *  @param alpha     透明度
 */
- (void)fillWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;
/**
 *  按路径画线
 */
- (void)stroke;
/**
 *  按指定的混合模式和透明度进行画线
 *
 *  @param blendMode 混合模式,枚举值
 *  @param alpha     透明度
 */
- (void)strokeWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;
/**
 *  此方法会修改当前图形上下文的可见绘图区域。调用它之后,后续绘制操作导致呈现的内容,只有当他们出现指定路径的填充区域内。
 *  如果您需要删除裁剪区域执行后续的绘制操作,必须保存当前图形状态(使用CGContextSaveGState调用此方法之前功能)。当你不再需要剪切区域,则可以恢复以前的绘图性能和使用剪切区域CGContextRestoreGState功能
 */
- (void)addClip;

检测点

/**
 *  路径包围的面积是否包含指定点
 *
 *  @param point 用来测试路径的点
 *
 *  @return YES:该点在路径包围的面积内,NO:则不在
 */
- (BOOL)containsPoint:(CGPoint)point;

变换

/**
 *  使用仿射变换矩阵的路径转换的路径
 *
 *  @param transform 仿射变换矩阵应用到的路径
 */
- (void)applyTransform:(CGAffineTransform)transform;

相关属性

@property (nonatomic) CGPathRef CGPath;
@property (nonatomic,readonly) CGPoint currentPoint;// 在图形路径中的当前点,如果当前路径为空,则此属性为CGPointZero
@property (nonatomic) CGFloat lineWidth; // 路径的线宽,默认1.0;
@property (nonatomic) CGLineCap lineCapStyle; // 端点样式,默认kCGLineCapButt
/**
 *  enum CGLineCap {
 *      kCGLineCapButt,
 *      kCGLineCapRound,
 *      kCGLineCapSquare
 *  };
 */
@property (nonatomic) CGLineJoin lineJoinStyle; // 线条链接样式,默认kCGLineJoinMiter
/**
 *  enum CGLineJoin {
 *      kCGLineJoinMiter, //尖的,斜接
 *      kCGLineJoinRound, //圆
 *      kCGLineJoinBevel //斜面
 *  }
 */
@property (nonatomic) CGFloat miterLimit; // 尖角限制值
@property (nonatomic) CGFloat flatness; // 曲线平坦度,默认0.6;值越小,曲线越平滑,但需要更多的计算时间。值越大,会导致更多的锯齿状曲线,但呈现的速度要快得多。
@property (nonatomic) BOOL usesEvenOddFillRule; // 是否使用奇偶缠绕规则填补路径,默认是NO; YES,路径是使用奇偶规则填补。NO,它使用的是非零规则填补。
/**
 *  对于奇偶规则,如果路径交叉的总数为奇数,则点被认为是在路径内与相应的区域被填充。如果横跨的数目是偶数,则点被认为是所述路径之外和该区域不填充。
 *  为非零规则,左到右路径的交叉计数为+1和右至左路径的交叉计数为-1。如果该交叉的总和不为零,该点被认为是在路径内与相应的区域被填充。如果该和为0,则点是路径外面和该区域不填充。
 */
@property (readonly,getter=isEmpty) BOOL empty;//路径是否有任何有效的元素(只读);有效的路径元素包括命令来移动到指定的点,画一条直线或曲线段或闭合路径
@property (nonatomic,readonly) CGRect bounds; // 路径的边框(只读);此属性的值表示完全封闭路径中的所有点,包括贝塞尔和二次曲线的控制点的最小矩形。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值