UIBezierPath详解

属性

  • 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长一点)

图来自https://www.cnblogs.com/zhangying-domy/archive/2016/07/04/5640745.html

@property(nonatomic) CGLineJoin lineJoinStyle;路径的连接点拐角样式
kCGLineJoinMiter:尖角 
kCGLineJoinRound:圆角 
kCGLineJoinBevel:缺角

图来自https://www.cnblogs.com/zhangying-domy/archive/2016/07/04/5640745.html

@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];

在这里插入图片描述
好了,学到这你就可以尝试绘制小猪佩奇了
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值