我正在尝试实现“手绘工具”。目前算法看起来像这样(我没有插入任何代码,因为方法很大,将尝试解释一个想法):
绘画
- 在touchesStarted:方法中,我创建NSMutableArray *pointsArray 并在其中添加点。调用setNeedsDisplay:方法。
- 在touchesMoved:方法中,我从 pointsArray 和当前点计算最后添加的点之间的点。将所有点添加到 pointsArray。调用setNeedsDisplay:方法。
- 在touchesFinished:事件中,我计算数组中最后添加的点与当前点之间的点。设置标志touchesWereFinished。调用setNeedsDisplay:。
使成为:
drawRect:方法检查是pointsArray != nil并且其中是否有任何数据。如果有 - 它开始在该数组的每个点中绘制圆圈。如果设置了标志touchesWereFinished - 将当前上下文保存到UIImage,释放 pointsArray,将其设置为nil并重置标志。
这种方法有很多缺点:
- 它很慢
- 当用户长时间触摸和移动手指时,它变得非常慢。阵列变得巨大
- 由圆圈组成的“线”很难看
我想改变我的算法,让它更快一点,线条更平滑。结果,我希望在以下 URL 的图片上有类似的行(抱歉,没有足够的声誉来插入图像):http: //2.bp.blogspot.com/_r5VzEAUYXJ4/SrOYp8tJCPI/AAAAAAAAAMw/ZwDKXiHlhV0/s320/SketchBook +手机(4).png
你能建议我吗,我可以这样画线(边缘光滑而纤细)?我想在边缘绘制带有 alpha 渐变的圆圈(使线条更平滑),但恕我直言,它会非常缓慢。
感谢帮助
更新
我改变了绘制算法。现在,我保存UITouch并在drawRect:方法中从上一个绘制路径的每个事件。指向当前的。并在每次drawRect:调用时从上下文中转储UIImage 。
但我还有两个问题:
- 是否可以画得更流畅。我的意思是,如果我画得很快,我很容易看到路径路径是一组直线。但我想画曲线,使路径平滑。贝塞尔曲线可能会有所帮助,但我不明白它们如何提供帮助。情况。
- 我想以较细的线开始路径并以较细的线结束。我怎么能做这条线变换?谢谢!