概念及使用介绍
UIBezierPath对象是对Core Graphics的封装,它定义在UIkit之中。它可以定义一个由曲线和直线构成的路径,这些路径可以是简单地形状,如:矩形,椭圆形,弧形,或者可以定义复杂的多边形。
使用一个UIBezierPath可以分为三步:
1.创建UIBezierPath对象
2.绘制路径
3.渲染路径
我们可以通过操纵路径的当前点设置一个路径的几何形状,当我们创建一个新的空路径对象,当前的目标点是不确定的,我们可以使用moveToPoint方法,把目标点移动到我们需要的位置。当添加完新线段之后,新线段的结束点当自动成为下一段的开始点。
一个UIBezierPath路径对象里面可以包含任意数量的开放或者封闭的子路径。当我们调用closePath的时候会从最后一个路径连接第一个路径进行关闭。当我们调用moveToPoint方法,会结束当前路径,但不会将其关闭。也就是说当我们调用moveToPoint方法绘制完路径之后再调用closePath,只会关闭当前子路径,上一个子路径不会关闭。
当我们创建完路径后我们可以调用stroke或者fill方法来渲染,stroke会渲染轮廓,但是fill会填充当前当前路径包围的区域。
使用方法
创建UIBezierPath对象:
+(instancetype)bezierPath
它会返回一个新的空的路径对象,需要我们自己去加路径
+ (instancetype)bezierPathWithRect:(CGRect)rect
它会创建一个对象,并且在这个对象内部创建了一个矩形
[[UIColor redColor]setStroke];
UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 200, 100)];
[path2 stroke];
+ bezierPathWithOvalInRect:(CGRect)rect
它会创建一个对象,并且在这个对象内部创建了一个椭圆
[[UIColor redColor]setStroke];
UIBezierPath *path3 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 100)];
[path3 stroke];
+ bezierPathWithRoundedRect:cornerRadius:
它会返回一个对象,并在这个对象内部创建了一个圆角矩形,后面的cornerRadius代表了圆角的大小,为0时是正常的矩形。
[[UIColor redColor]setStroke];
UIBezierPath *path4 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 100, 200, 100) cornerRadius:15];
[path4 stroke];
+(instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii
它会创建一个对象,并在这个对象内部创建了一个圆角矩形,但是corners代表了矩形的4个角哪个需要圆角,cornerradii代表了圆角的大小
[[UIColor redColor]setStroke];
UIBezierPath *path5 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 100, 200, 100) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(8, 16)];
[path5 stroke];
+(instancetype)bezierPathWithArcCenter:(CGPoint)cente radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle
clockwise:(BOOL)clockwise
创建了一个对象,这个对象内部创建了一个圆弧 center代表圆弧的中心点,radius代表圆弧的半径 startAngle代表开始的角度
endAngle代表结束的角度 clockwise代表是顺时针画还是逆时针画,YES代表顺时针(即一个圆的下半部分),NO代表逆时针(即一个圆的上半部分)
[[UIColor redColor]setStroke];
UIBezierPath *path6 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(100, 100) radius:50 startAngle:0 endAngle:M_PI/2*3 clockwise:NO];
[path6 stroke];
+(instancetype)bezierPathWithCGPath:(CGPathRef)CGPath
返回与指定路径信息的新路径对象,如果CGPath为nil,将引发异常
构建路径
- (void)moveToPoint:(CGPoint)point
此方法会移动接收点到指定的位置,此方法会结束之前的子路径,但它不会关闭子路径,因此子路径的第一个点和最后点不彼此连接
- (void)addLineToPoint:(CGPoint)point
此方法创建一个直线段开始于当前点,结束于当前指定的位置,如果你没有指定路径的当前点,那么此方法不起作用。
- (void)addArcWithCenter:(CGPoint)center
radius:(CGFloat)radius
startAngle:(CGFloat)startAngle
endAngle:(CGFloat)endAngle
clockwise:(BOOL)clockwise
此方法将在指定的中心点开始画弧,center指定的圆的中心点,radius圆弧的半径,startAngle开始的角度,endAngle结束的角度,clockwise为YES将顺时针画圆弧,为NO将逆时针画弧。
- (void)addQuadCurveToPoint:(CGPoint)endPoint
controlPoint:(CGPoint)controlPoint
添加一个二次贝塞尔曲线,endPoint指曲线的结束点,controlPoint指的曲线的控制点,在使用时必须设置路径的起始点,如果路径是空的,那么这个方法不起作用
- (void)addCurveToPoint:(CGPoint)endPoint
controlPoint1:(CGPoint)controlPoint1
controlPoint2:(CGPoint)controlPoint2
添加一个三次贝塞尔曲线,endPoint指的结束点,controlPoint1指的第一个控制点,controlPoint2指的第二个控制点
- (void)closePath
这个方法会关闭最近添加的子路径,这个方法会建立一条线段,在子路径的第一个和最后点之间
- (void)removeAllPoints
这个方法会移除接收器的所有点,有效的删除所有子路径
lineCapStyle属性:线条拐角的样式属性
lineJoinStyle属性:线条终点样式属性