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]; }
图例:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】