属性
- CGPath
@property(nonatomic) CGPathRef CGPath;
//将UIBezierPath类转换成CGPath,类似于UIColor的CGColor,可获取UIBezierPath经历的所有路径
- empty
是否路径信息为空, 即使通过moveToPoint:移动到指定的位置也算不为空
@property(readonly,getter=isEmpty) BOOL empty;
//只读类型,路径上是否有有效的元素,
是否路径信息为空, 即使通过moveToPoint:移动到指定的位置也算不为空 。
@property(nonatomic,readonly) CGRect bounds;
//和view的bounds是不一样的,它获取path的X坐标、Y坐标、宽度,但是高度为0
@property(nonatomic,readonly) CGPoint currentPoint;
//当前path的位置,可以理解为path的终点
@property(nonatomic) CGFloat lineWidth;
//path宽度
@property(nonatomic) CGLineCap lineCapStyle;//path端点样式,有3种样式
kCGLineCapButt:无端点
kCGLineCapRound:圆形端点
kCGLineCapSquare:
方形端点(样式上和kCGLineCapButt是一样的,但是比kCGLineCapButt长一点)
@property(nonatomic) CGLineJoin lineJoinStyle;路径的连接点拐角样式
kCGLineJoinMiter:尖角
kCGLineJoinRound:圆角
kCGLineJoinBevel:缺角
@property(nonatomic) CGFloat flatness;//弯曲路径的渲染精度,默认为0.6,越小精度越高,相应的更加消耗性能
@property(nonatomic) BOOL usesEvenOddFillRule; //单双数圈规则是否用于绘制路径,默认是NO。
方法
初始化方法
相当于UIBUtton buttonWithType方法创建path
//以CGRect为范围,创建一个矩形路径。
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 200, 300)];
[bezierPath stroke];
以下为其他几种
以CGRect为范围,创建一个圆/椭圆。
UIBezierPath *bezierPath2 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 300)];
//[bezierPath2 stroke];
以CGRect为大小,以cornerRadius为圆角半径,绘制一个圆角矩形。
UIBezierPath *bezierPath3 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 100, 200, 300) cornerRadius:10.f];
//[bezierPath3 stroke];
绘制一个圆角矩形,通过UIRectCorner选择圆弧的位置,cornerRadii为圆弧的大小。
UIBezierPath *bezierPath4 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 100, 200, 300) byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight | UIRectCornerBottomLeft cornerRadii:CGSizeMake(20, 40)];
//绘制一个圆弧路径。ArcCenter:圆弧圆心位置;radius:圆弧半径;startAngle:开始的弧度(角度);endAngle:结束的弧度(角度);clockwise:是否为顺时针
UIBezierPath *bezierPath5 = [UIBezierPath bezierPathWithArcCenter:self.center radius:100 startAngle:M_PI_2 endAngle:2 * M_PI clockwise:YES];
以另一个路径过程初始化一个,相当于复制
UIBezierPath *bezierPath6 = [UIBezierPath bezierPathWithCGPath:bezierPath0.CGPath];
画路径
-
画直线
//将当前点移动到指定的位置。相当于设置起点,但后续可以更改 [bezierPath0 moveToPoint:CGPointMake(100, 300)]; 在路径中增加一条直线(起点+终点=一条直线)如果没有设置以上的起点,相当于没有线条 [bezierPath0 addLineToPoint:CGPointMake(150, 150)];
-
终于要绘制贝塞尔曲线了
绘制三阶贝塞尔曲线。以endPoint为终点,以controlPoint1、controlPoint2两个点为控制点,绘制贝塞尔曲线。
[bezierPath0 addCurveToPoint:CGPointMake(300, 300) controlPoint1:CGPointMake(150, 150) controlPoint2:CGPointMake(220, 360)];
绘制二阶贝塞尔曲线。以endPoint为终点,以controlPoint为控制点,绘制二阶贝塞尔曲线。
[bezierPath0 addQuadCurveToPoint:CGPointMake(300, 300) controlPoint:CGPointMake(200, 150)];
- 圆弧 M_PI_2 = PI/ 2
//绘制一条圆弧。ArcCenter:圆弧圆心位置;radius:圆弧半径;startAngle:开始的弧度(角度);endAngle:结束的弧度(角度);clockwise:是否为顺时针。
//[bezierPath0 addArcWithCenter:self.center radius:100 startAngle:M_PI endAngle:2 * M_PI clockwise:YES];
渲染曲线
- (void)closePath; //闭合曲线
闭合之后,从起点开始加线
[bezierPath0 addLineToPoint:CGPointMake(220, 80)];
[bezierPath0 addLineToPoint:CGPointMake(150, 50)];
[bezierPath0 closePath];
闭合之后,从起点开始加线
[bezierPath0 addLineToPoint:CGPointMake(250, 430)];
- (void)removeAllPoints; //移除其所有的点
- (void)appendPath:(UIBezierPath *)bezierPath;//拼接路径
- (UIBezierPath *)bezierPathByReversingPath;
//返回一个翻转已有路径的新路径。反方向绘制path,扭转路径,即起点变成终点,终点变成起点
//设置线型 可设置成虚线
CGFloat patten[] = {4, 6};
//[bezierPath0 setLineDash:patten count:2 phase:1];
- 填充颜色
//填充模式,透明度
//[bezierPath0 fillWithBlendMode:kCGBlendModeClear alpha:0.1];
//路径的填充颜色,必须写在v[bezierPath0 fill]之前
//[[UIColor orangeColor] setFill];
//[bezierPath0 fill];
- 路径颜色
//路径模式,透明度
[bezierPath0 strokeWithBlendMode:kCGBlendModeHue alpha:0.4];
- (void)addClip;
加了addClip之后,就是bezierPath0的可见区域就是已经绘制好的封闭区域,也就是说,之后绘制的路径都只呈现封闭区域里有的
[bezierPath0 moveToPoint:CGPointMake(100, 300)];
[bezierPath0 addLineToPoint:CGPointMake(220, 80)];
[bezierPath0 addLineToPoint:CGPointMake(150, 50)];
[bezierPath0 closePath];
[bezierPath0 addClip];
[bezierPath0 addArcWithCenter:CGPointMake(120, 90) radius:10 startAngle:M_PI_2 endAngle:2 * M_PI clockwise:YES];
好了,学到这你就可以尝试绘制小猪佩奇了