简介

UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到。

分析

首先我们先看一下,UIBezierPath有哪些重要的属性:
1、 [color set]设置颜色,color为创建的UIColor对象
2、 [path stroke]填充view的线条的颜色,与[color set]配合使用 ,
3、 [path fill]填充整个view内部的颜色,与[color set]配合使用。
4、 path.lineWidth = 5.0; 这个很好理解了,就是划线的宽度
5、 path.lineCapStyle 这个线段起点是终点的样式,这个样式有三种:

  • kCGLineCapButt
  • kCGLineCapRound
  • kCGLineCapSquare

6、 path.lineJoinStyle 这个属性是用来设置两条线连结点的样式,同样它也有三种样式供我们选择

  • kCGLineJoinMiter 直接连接
  • kCGLineJoinRound 圆滑衔接
  • kCGLineJoinBevel 斜角连接

使用

接下来,我们就看一下UIBezierPath到底应该怎么使用:
首先,我们先自定义一个UIView的子类,然后重写- (void)drawRect:(CGRect)rect 方法,将创建图形的方法写到该方法中,下面是一些简单的示例:

画多边形
    UIBezierPath* aPath = [UIBezierPath bezierPath];
aPath.lineWidth = 15.0;
/*
kCGLineCapButt,
kCGLineCapRound,
kCGLineCapSquare
*/
aPath.lineCapStyle = kCGLineCapButt ; //终点(起点)样式
/*
kCGLineJoinMiter,
kCGLineJoinRound,
kCGLineJoinBevel
*/
aPath.lineJoinStyle = kCGLineJoinBevel; //拐点样式 [aPath moveToPoint:CGPointMake(150, 30)];//设置起始点
[aPath addLineToPoint:CGPointMake(250, 70)];//途经点
[aPath addLineToPoint:CGPointMake(210, 170)];//途经点
[aPath addLineToPoint:CGPointMake(90, 170)];//途经点
[aPath addLineToPoint:CGPointMake(50, 70)];//途经点 [aPath closePath];//通过调用closePath方法得到最后一条线 UIColor *strokeColor = [UIColor redColor];
[strokeColor set];
[aPath stroke];//设置线条颜色
UIColor *fillColor = [UIColor blueColor];
[fillColor set];
[aPath fill];//填充

多边形.png

如果是创建四边形可直接使用:

    UIBezierPath* aPath = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)];
画圆
    UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 100)];
aPath.lineWidth = 5.0;
aPath.lineCapStyle = kCGLineCapRound; //线条拐角
aPath.lineJoinStyle = kCGLineCapRound; //终点处理
UIColor *color = [UIColor redColor];
[color set];
[aPath stroke];

弧形.png

如果要画正圆,将rect的width和height设置为相等的值即可。

画弧形
    /*
ArcCenter: 原点
radius: 半径
startAngle: 开始角度
endAngle: 结束角度
clockwise: 是否是顺时针方向
*/
UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 300)
radius:80
startAngle:0
endAngle:pi
clockwise:NO];
aPath.lineWidth = 5.0;
aPath.lineCapStyle = kCGLineCapRound; //线条拐角
aPath.lineJoinStyle = kCGLineCapRound; //终点处理 UIColor *color = [UIColor redColor];
[color set]; //设置线条颜色
[aPath stroke];

圆形.png
画二次曲线
    UIBezierPath* aPath = [UIBezierPath bezierPath];
aPath.lineWidth = 5.0;
aPath.lineCapStyle = kCGLineCapRound; //线条拐角
aPath.lineJoinStyle = kCGLineCapRound; //终点处理
[aPath moveToPoint:CGPointMake(100, 100)];//设置初始点
//终点 controlPoint:切点(并不是拐弯处的高度,不懂的同学可以去看三角函数)
[aPath addQuadCurveToPoint:CGPointMake(200, 100) controlPoint:CGPointMake(150, 50)]; UIColor *color = [UIColor redColor];
[color set];
[aPath stroke];

二次曲线.png
画三次曲线
    UIBezierPath *path2 = [UIBezierPath bezierPath];
path2.lineWidth = 5.0;
path2.lineCapStyle = kCGLineCapRound;
path2.lineJoinStyle = kCGLineJoinRound;
[path2 moveToPoint:CGPointMake(0, 100)];
[path2 addCurveToPoint:CGPointMake(100, 100) controlPoint1:CGPointMake(25, 50) controlPoint2:CGPointMake(75, 150)];//两个切点
UIColor *color = [UIColor redColor];
[color set];
[path2 stroke];

三次曲线.png

以上便是iOS中UIBezierPath最基本的使用方法了,在平时的开发中,我们经常将UIBezierPath与CALayer配合使用,下面是一个简单的例子:

    //创建CAShapeLayer对象
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.frame = CGRectMake(100, 100, 200, 200);//设置shapeLayer的尺寸和位置
shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充颜色为ClearColor
//设置线条的宽度和颜色
shapeLayer.lineWidth = 1.0f;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
//创建一个圆形贝塞尔曲线
UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 200)];
//将贝塞尔曲线设置为CAShapeLayer的path
shapeLayer.path = aPath.CGPath;
//将shapeLayer添加到视图的layer上
[self.view.layer addSublayer:shapeLayer];

shapeLayer.png

总结:

到此为止,关于UIBezierPath最基本的使用就介绍完了,但是关于UIBezierPath在iOS中还有很多更加神奇的应用,有兴趣的同学可以研究一下。

作者:沐泽sunshine
链接:http://www.jianshu.com/p/d7671ec6fbb7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

iOS贝塞尔曲线(UIBezierPath)的基本使用方法的更多相关文章

  1. iOS开发 贝塞尔曲线UIBezierPath(2)

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...

  2. iOS开发 贝塞尔曲线UIBezierPath(后记)

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...

  3. 贝塞尔曲线UIBezierPath简单使用

    //常用属性 /* 1.CGPath: 将UIBezierPath类转换成CGPath 2.currentPoint: 当前path的位置,可以理解为path的终点 3.lineWidth: 线条宽度 ...

  4. iOS开发 贝塞尔曲线UIBezierPath

    最近项目中需要用到用贝塞尔曲线去绘制路径 ,然后往路径里面填充图片,找到这篇文章挺好,记录下来 自己学习! 转至 http://blog.csdn.net/guo_hongjun1611/articl ...

  5. UIBezierPath IOS贝塞尔曲线

    //记录  贝塞尔曲线使用 //根据一个矩形画曲线 + (UIBezierPath *)bezierPathWithRect:(CGRect)rect //根据矩形框的内切圆画曲线 + (UIBezi ...

  6. IOS贝塞尔曲线圆形进度条和加载动画

    做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步 ...

  7. IOS 贝塞尔曲线切割圆角

    写一个UIView扩展 1. .h文件 @interface UIView (Corner) - (void)setCornerWithType:(UIRectCorner)type Radius:( ...

  8. iOS - 贝塞尔曲线,折线,曲线,波浪线

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHlsYW5fbHdiXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  9. iOS开发 贝塞尔曲线

    iOS开发 贝塞尔曲线UIBezierPath - 陌云 时间 2014-03-14 11:04:00  博客园-所有随笔区 原文  http://www.cnblogs.com/moyunmo/p/ ...

随机推荐

  1. IIS状态监测(如果状态错误则重启IIS)

    步骤: 1:建立健康监测文件.文件内容随意,这里以healthcheck.aspx命名,内容是<span>hellow word</span> 2:利用vbs语言执行IIS重启 ...

  2. Swift 表达式

    前言 Swift 语言使用表达式来表示程序中的最小单位,通常一个表达式是由数字.字符.运算符.变量.常量.函数调用等可以求得值的有意义的排列组成的组合. 根据组合方式的不同,表达式可以分为基本表达式. ...

  3. EF GroupBy 根据key 分组 再把key求和(取决于每条数据中 arr的条数) arr 中有多少条数据 就把多少个key 加起来

    List<A> alist = new List<A>{ ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ...

  4. MySQL -- 全文检索(自然语言全文检索)

    自然语言全文本检索缺省或者modifier被设置为in natural language mode,都是进行自然语言检索.对于表中的每一行,match()都会返回一个关联值. mysql> CR ...

  5. rhel7 ifconfig command not found

    同事扔过来一个rhel7.2的系统,登录后发现没有安装ifconfig命令: # ifconfig -bash: ifconfig: command not found 先看看环境变量: # echo ...

  6. java中如何将byte[]里面的数据转换成16进制字符串

    原文链接: http://zhidao.baidu.com/link?url=RmLDjr4PtP_oUE5J2pKNZSvlHt1K7HcCh4-03Y7VkXYhJ0kawg01CtKHZc2uB ...

  7. 跟我学SharePoint 2013视频培训课程——排序、过滤在列表、库中的使用(10)

    课程简介 第10天,SharePoint 2013排序.过滤在列表.库中的使用. 视频 SharePoint 2013 交流群 41032413

  8. SharePoint利用HttpModule的Init方法实现全局初始化

    接上篇 我们知道,HttpRuntime中会对每一个Request创建一个HttpApplication对象(HttpApplicationFactory从一个HttpApplication池来拿). ...

  9. labview中小黑点,小红点

    小黑点:在labview中每一个小黑点就代表了一次内存的分配,通过小黑点可以帮助我们分析数据变量的内存拷贝情况

  10. python selenium 报错unknown error: cannot focus element 解决办法

    登录框由于js限制,定位到元素后无法sendkey ,sendky报错如下: selenium.common.exceptions.WebDriverException: Message: unkno ...