zoukankan      html  css  js  c++  java
  • iOS-贝塞尔连续曲线

    一个曲线

    UIColor *color = [UIColor redColor];
        [color set];
        UIBezierPath *path = [UIBezierPath bezierPath];
        ///线的宽度【粗细】
        path.lineWidth = 5;
        ///端点类型
        path.lineCapStyle = kCGLineCapRound;
        ///衔接类型
        path.lineJoinStyle = kCGLineJoinRound;
        ///起点
        [path moveToPoint:CGPointMake(0, 100)];
        [path addCurveToPoint:CGPointMake(200, 100) controlPoint1:CGPointMake(50, 0) controlPoint2:CGPointMake(150, 200)];
        [path stroke];

     图例:

    多个曲线

    /**
     贝塞尔曲线
     CGRect
    */  
    - (void)draweBezierCurves:(CGRect)rect{
        ///曲线水平位置y坐标
        CGFloat lintY = rect.origin.y;
        ///每个曲线的水平长度【两个弧度为一个曲线】
        NSInteger lineWidth = 8;
        ///每个曲线的上下顶点与水平位置 距离
        CGFloat lingPeak = 3;
        ///波浪线个数
        NSInteger lineCount = (int)(rect.size.width / lineWidth);
        ///除了整数外,最后一条线的长度【小于 lineWidth】
        CGFloat lastLineWidth = rect.size.width - lineCount*lineWidth;
        ///贝塞尔
        UIBezierPath *path = [UIBezierPath bezierPath];
        ///线的宽度【粗细】
        path.lineWidth = 1;
        ///端点类型
        path.lineCapStyle = kCGLineCapRound;
        ///衔接类型
        path.lineJoinStyle = kCGLineJoinRound;
        ///颜色
        UIColor *color = [UIColor redColor];
        
        [color set];
        for (int i = 0; i < lineCount; i ++) {
            ///起点
            [path moveToPoint:CGPointMake(rect.origin.x + i*lineWidth, lintY)];
            ///三点成线
            [path addCurveToPoint:CGPointMake(rect.origin.x + i*lineWidth + lineWidth, lintY) controlPoint1:CGPointMake(rect.origin.x + i*lineWidth + lineWidth/4, lintY - lingPeak) controlPoint2:CGPointMake(rect.origin.x + i*lineWidth + (lineWidth/4)*3, lintY + lingPeak)];
        }
        
        if (lastLineWidth > 0) {
            ///起点
            [path moveToPoint:CGPointMake(rect.origin.x + lineCount*lineWidth, lintY)];
            ///三点成线
            [path addCurveToPoint:CGPointMake(rect.origin.x + lineCount*lineWidth + lastLineWidth, lintY) controlPoint1:CGPointMake(rect.origin.x + lineCount*lineWidth + lastLineWidth/4, lintY - lingPeak) controlPoint2:CGPointMake(rect.origin.x + lineCount*lineWidth + (lastLineWidth/4)*3, lintY + lingPeak)];
            
        }
        [path stroke];
    }

     图例:

  • 相关阅读:
    delphi 文件的读取(二进制文件和文本文件)
    delphi中用代码实现注册Ocx和Dll(有点怪异,使用CallWindowProc来调用指定函数DllRegisterServer)
    delphi 控件大全(确实很全)
    C#编写Windows 服务
    SSD Buffer Pool Extension
    .NET Web开发技术简单整理
    Python数据库访问之SQLite3、Mysql
    infiniband学习总结
    模板引擎开发3自定义标签的处理
    CSS选择器、优先级与匹配原理
  • 原文地址:https://www.cnblogs.com/wangkejia/p/8885604.html
Copyright © 2011-2022 走看看