贝塞尔曲线学习 (一)

本系列文章为自己学习BezierPath的过程记录,有些知识是百度出来的,这里算个总结。

参考

1: 画直线,也叫做一阶曲线。
- (void)drawRect:(CGRect)rect
{
    // 设置线的填充色
    [[UIColor redColor] setStroke];
    
    // 新建一个bezier对象
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    // 设置线宽度
    bezierPath.lineWidth = 10;
    // 设置线两头样式
    bezierPath.lineCapStyle = kCGLineCapRound;
    // 设置起点、终点坐标
    [bezierPath moveToPoint:CGPointMake(10, 10)];
    [bezierPath addLineToPoint:CGPointMake(100, 100)];
    // 开始绘制
    [bezierPath stroke];
}

效果图:


屏幕快照 2015-12-30 14.10.31.png

2: 二阶曲线

二阶曲线,是指有一个公共切点(不知道怎么形容)曲线
网上扣了一张图,B这个点,就是所谓的公共切点

屏幕快照 2015-12-30 14.14.14.png

- (void)drawRect:(CGRect)rect
{
    // 设置线的填充色
    [[UIColor redColor] setStroke];
    
    // 新建一个bezier对象
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    // 设置线宽度
    bezierPath.lineWidth = 10;
    // 设置线两头样式
    bezierPath.lineCapStyle = kCGLineCapRound;
    // 设置起点、终点坐标
    [bezierPath moveToPoint:CGPointMake(100, 100)];
    [bezierPath addQuadCurveToPoint:CGPointMake(200, 200) controlPoint:CGPointMake(300, 0)];
    
    // 开始绘制
    [bezierPath stroke];
}

这里的公共切点,就是右上角那个点啦。

屏幕快照 2015-12-30 14.16.05.png


3: 三阶曲线

三阶曲线,与二阶曲线类似,系统都有提供内置的方法,只是多了一个公共切点而已。

屏幕快照 2015-12-30 14.19.50.png
- (void)drawRect:(CGRect)rect
{
    // 设置线的填充色
    [[UIColor redColor] setStroke];
    
    // 新建一个bezier对象
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    // 设置线宽度
    bezierPath.lineWidth = 10;
    // 设置线两头样式
    bezierPath.lineCapStyle = kCGLineCapRound;
    // 设置起点、终点坐标
    [bezierPath moveToPoint:CGPointMake(100, 100)];
    [bezierPath addCurveToPoint:CGPointMake(200, 200) controlPoint1:CGPointMake(150, 0) controlPoint2:CGPointMake(150, 300)];
    
    // 开始绘制
    [bezierPath stroke];
}
   
屏幕快照 2015-12-30 14.21.28.png

4: 多阶曲线

系统最多只给出了三阶曲线的绘制方法,这时有的人就要说了,产品要做一个4阶、5阶的曲线,怎么搞?
查一下API,你会发现一个appendPath的方法,不用说,看名字就知道什么意思了吧。

- (void)drawRect:(CGRect)rect
{
    // 设置线的填充色
    [[UIColor redColor] setStroke];
    
    // 新建一个bezier对象
    UIBezierPath *bezierPath = [UIBezierPath bezierPath];
    // 设置线宽度
    bezierPath.lineWidth = 10;
    // 设置线两头样式
    bezierPath.lineCapStyle = kCGLineCapRound;
    // 设置起点、终点坐标
    [bezierPath moveToPoint:CGPointMake(100, 100)];
    [bezierPath addCurveToPoint:CGPointMake(200, 200)
                  controlPoint1:CGPointMake(150, 0)
                  controlPoint2:CGPointMake(150, 300)];
    
    // 创建第二条贝塞尔曲线
    UIBezierPath *bezierPath2 = [UIBezierPath bezierPath];
    // 设置起点、终点坐标
    [bezierPath2 moveToPoint:CGPointMake(200, 200)];
    [bezierPath2 addCurveToPoint:CGPointMake(290, 290)
                   controlPoint1:CGPointMake(250, 0)
                   controlPoint2:CGPointMake(250, 300)];
    // 将第二条线,加到第一条线上面去
    [bezierPath appendPath:bezierPath2];
    
    // 开始绘制
    [bezierPath stroke];
}
屏幕快照 2015-12-30 14.33.38.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 谈谈贝塞尔曲线 最近在做项目的时候,需要用到一个动画,非常简单的动画,简单到就是直接对一个View做平移… 然而虽...
    雨润听潮阅读 11,308评论 1 16
  • 最近在做项目的时候,需要用到一个动画,非常简单的动画,简单到就是直接对一个View做平移... 然而虽然动画简单,...
    IAMDAEMON阅读 9,775评论 12 69
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,707评论 25 709
  • 从头发丝到脚甲尖, 都在大声尖叫。 大口呼吸。 攥拳,松拳。 从一到十, 默数。 斤斤计较, 每一次阵痛来临前的平...
    张无虞啦阅读 1,319评论 0 0
  • 那天微雨,空气些许湿润,我和A站在一片广场中间,周围高楼林立,不记得我怎么到的那里,也不明白为何要出现在那里。空荡...
    在秋天的风里阅读 1,755评论 0 0