iOS UIBezierPath方法的使用

创建UIBezierPath对象


/** 
 *  创建并返回一个UIBezierPath对象。 
 * 
 *  @return 一个新的空路径对象。 
 */  
+ (instancetype)bezierPath;  
/** 
 *  创建并返回一个用矩形路径初始化的UIBezierPath对象。 
 * 
 *  @param rect 矩形路径 
 * 
 *  @return 与矩形路径的新路径对象 
 */  
+ (instancetype)bezierPathWithRect:(CGRect)rect;  
下面是对应代码和效果图
iOS UIBezierPath方法的使用_第1张图片
屏幕快照 2017-08-16 下午4.25.54.png
iOS UIBezierPath方法的使用_第2张图片
屏幕快照 2017-08-16 下午4.14.41.png
/** 
 *  创建并返回一个在指定的矩形内切一个椭圆形的路径初始化的UIBezierPath对象 
 * 
 *  @param rect 矩形,会内切一个椭圆 
 * 
 *  @return 与椭圆形路径一致的新路径对象。 
 */  
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect;  
下面是对应代码和效果图
iOS UIBezierPath方法的使用_第3张图片
屏幕快照 2017-08-16 下午4.24.45.png
iOS UIBezierPath方法的使用_第4张图片
屏幕快照 2017-08-16 下午4.19.04.png
/** 
 *  创建并返回一个采用了圆角矩形路径初始化的UIBezierPath对象。 
 * 
 *  @param rect         矩形路径 
 *  @param cornerRadius 圆角半径 
 * 
 *  @return 与圆角矩形路径一致的对象。 
 */  
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius;  
iOS UIBezierPath方法的使用_第5张图片
屏幕快照 2017-08-16 下午4.33.20.png

iOS UIBezierPath方法的使用_第6张图片
屏幕快照 2017-08-16 下午4.33.12.png
/** 
 *  创建并返回一个采用了圆角矩形路径初始化的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 // 矩形的各个角 
 *  }; 
 */  
iOS UIBezierPath方法的使用_第7张图片
屏幕快照 2017-08-16 下午4.35.58.png

iOS UIBezierPath方法的使用_第8张图片
屏幕快照 2017-08-16 下午4.35.51.png
/** 
 *  创建并返回一个带有圆弧初始化的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;  
iOS UIBezierPath方法的使用_第9张图片
屏幕快照 2017-08-16 下午4.40.17.png

iOS UIBezierPath方法的使用_第10张图片
屏幕快照 2017-08-16 下午4.39.43.png
/** 
 *  创建并返回一个指定路径信息的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; // 路径的边框(只读);此属性的值表示完全封闭路径中的所有点,包括贝塞尔和二次曲线的控制点的最小矩形。 

参考链接:https://www.cnblogs.com/jaesun/p/iOS-CAShapeLayerUIBezierPath-hua-xian.html

你可能感兴趣的:(iOS UIBezierPath方法的使用)