前言
使用UIBezierPath或者CGContext进行图形绘制想必大家应该都比较熟悉了,但笔者最近项目有一个需求是做一个画板工具,需要动态绘制图形和平滑曲线,并且曲线可以编辑和拖动来改变形状。这个需求一拿到就想到使用贝塞尔曲线来绘制平滑曲线,但要动态绘制就觉得很头疼了,经过研究之后发现还是不难解决的。下面详细讲讲,有类似需求的可作参考。
实现效果
如下:
思路
官方提供的贝塞尔曲线绘制API有以下两个方法,分别是绘制二阶贝塞尔曲线和三阶贝塞尔曲线:
- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint;
- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;
要想实现编辑曲线,能改变的参数就只有起点坐标、终点坐标、控制点坐标。因此从这三个参数入手,选中起点和终点并拖动可以改变曲线的起点和终点以及弯曲程度,拖动画板空白处可以改变曲线的控制点(也就是贝塞尔曲线的切线交点),从而改变曲线形状。本文以二阶贝塞尔
曲线为例。
代码
具体代码逻辑如下:
本文主要想写的是实现贝塞尔曲线动态绘制逻辑,因此将画板功能进行简化