iOS 开发贝塞尔曲线


 UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths

 

   创建和使用一个path对象的过程是分开的。创建path是第一步,包含一下步骤:

1)创建一个Bezier path对象。

2)使用方法moveToPoint:去设置初始线段的起点。

3)添加line或者curve去定义一个或者多个subpaths

4)改变UIBezierPath对象跟绘图相关的属性。

例如,我们可以设置stroked path的属性lineWidthlineJoinStyle。也可以设置filled path的属性usesEvenOddFillRule

   当创建path,我们应该管理path上面的点相对于原点(00),这样我们在随后就可以很容易的移动path了。为了绘制path对象,我们要用到strokefill方法。这些方法在current graphic context下渲染pathlinecurve段。


1、绘制多边形

 UIBezierPath *path = [UIBezierPath bezierPath];

   
    [path moveToPoint:CGPointMake(100, 0)];//起点
    //中间点
    [path addLineToPoint:CGPointMake(200, 40)];
    [path addLineToPoint:CGPointMake(160, 140)];
    [path addLineToPoint:CGPointMake(40, 140)];
    [path addLineToPoint:CGPointMake(0, 40)];
    [path closePath];//合闭
    [path stroke];//根据坐标连线

 UIBezierPath *path = [UIBezierPath bezierPath];

   
    [path moveToPoint:CGPointMake(100, 0)];//起点
    //中间点
    [path addLineToPoint:CGPointMake(200, 40)];
    [path addLineToPoint:CGPointMake(160, 140)];
    [path addLineToPoint:CGPointMake(40, 140)];
    [path addLineToPoint:CGPointMake(0, 40)];
    [path closePath];//合闭
    [path stroke];//根据坐标连线
2、矩形

+ (instancetype)bezierPathWithRect:(CGRect)rect;这个类方法就是用来绘制矩形的


3、圆形或者椭圆形

 + (UIBezierPath *)bezierPathWithOvalInRect:(CGRect)rect

这个方法根据传入的rect矩形参数绘制一个内切曲线。当传入的rect是一个正方形时,绘制的图像是一个内切圆;当传入的rect是一个长方形时,绘制的图像是一个内切椭圆

4、弧形

 + (UIBezierPath *)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise

其中的参数分别指定:这段圆弧的中心,半径,开始弧度,结束弧度,是否顺时针方向。

5、二次贝塞尔曲线

首先通过   - (void)moveToPoint:(CGPoint)point;方法设置起始点

然后通过   

 - (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint  

方法设置结束点和控制点的位置

6、三次贝塞尔曲线

首先通过   - (void)moveToPoint:(CGPoint)point;方法设置起始点

然后通过   

 - (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2

分别设置结束点、控制点1以及控制点2的位置

demo的下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值