最近在开发中接触到了UIBezierPath和Core Graphics相关的知识,来绘制一些指定的图形样式,从而对二者做了一些简单的了解和浅显的使用记录.
1:UIBezierPath
- 介绍
- UIBezierPath属于UIKit框架,继承与NSObject基类。它允许开发者在自定义的视图中使用直线,曲线等线段的组合定义好自己的路径并且渲染绘制出路径组合的图形,这些图形可以是简单的矩形,圆形,椭圆形,弧形等,也可以是直线、曲线等线条组合而成的复杂的几何图形。一旦使用路径定义好几何形状,就可以使用类的渲染方法在当前的上下文绘将其渲染出来
- UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。
2: 使用
- 路径的创建:即创建一个UIBezierPath对象
-
+(instancetype)bezierPath
创建一个空的UIBeizierPath对象; -
+ (instancetype)bezierPathWithRect:(CGRect)rect
这个方法会创建一个以rect的原点作为起点,顺时针添加线条组成的封闭子路径,并以此矩形创建一个UIBeizierPath对象; -
+ (instancetype)bezierPathWithOvalInRect:(CGRect)rect
这个方法会在顺时针方向(相对于坐标系统)上使用一串贝塞尔曲线去绘制一个近似椭圆的封闭子路径(如果rect参数确定为正方形,则内切的路径是个圆形),并使用此路径创建一个UIBeizierPath对象; -
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius
使用圆角的(顺时针封闭)矩形路径创建一个UIBeizierPath对象;*
rect-定义基础的矩形路径,
cornerRadius-定义矩形每个角的弧度,0代表没有弧度* -
+ (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii
使用指定部分圆角的(顺时针封闭)矩形路径创建一个UIBeizierPath对象,*
rect-定义基础的矩形路径,
corners-定义矩形那个角可以弧度化,可弧度化的尺寸* -
+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise
使用指定开放的圆弧路径
创建一个UIBeizierPath对象。*
center-圆弧对应的中心原点
radius-圆弧的半径
startAngle-弧度开始的角度
endAngle-弧度结束的角度
clockwise-是否顺时针方向 + (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath
- 配置UIBeizierPath对象属性
- 使用
- (void)moveToPoint:(CGPoint)point;
初始化路径原点 - 使用
- (void)addLineToPoint:(CGPoint)point 、addArcWithCenter:radius:startAngle:endAngle:clockwise:
等添加线段,定义一或多个子路径 - 修改 UIBezierPath 的绘图相关的属性,比如
stroke path的属性 lineWidth 和 lineJoinStyle ,filled path的属性 usesEvenOddFillRule
- 进行图形的渲染绘制,使用
strok
和fill