在iPhone上用手指触摸绘制平滑的线条

3
我如何在iPhone上使用手指滑动/触摸动作绘制平滑的线条?我有以下代码,但不够流畅。例如,当我尝试画一个圆时,它会产生拐角/转弯。我认为我需要使用OpenGL。有什么想法吗?示例代码?教程?
谢谢!
UIGraphicsBeginImageContext(self.view.frame.size);
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound);
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0);
CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), YES);
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0);
CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
drawImage.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

1
最终我使用了 Open GL 和一个粒子。 这方面的好例子是苹果公司的 GLPaint 示例代码。 - Sharief
3个回答

5

我最终使用了Open GL和粒子效果。一个很好的例子是查看苹果公司的GLPaint示例代码。


它的基本原理是什么? - nonopolarity

3
将以下代码添加到您的代码中,以平滑连接点之间的线条。
CGContextSetLineJoin(UIGraphicsGetCurrentContext(), kCGLineJoinRound);

那将会产生很大的影响。


1

你不需要OpenGL。只需保留对起始点的引用,并在touchesMoved中清除上下文,然后按照以下方式进行操作:

CGContextBeginPath(UIGraphicsGetCurrentContext());
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), startPoint.x, startPoint.y);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());

这将从起点到当前点绘制一条直线。


这段代码只能绘制直线,无法画圆,比如说。 - lugte098
我建议您更仔细地查看一些CGPath函数。例如,对于圆形,您可以使用CGPathAddArc - shosti
4
您错过了问题。在Cocoa-touch中,当您尝试在屏幕上绘制一个圆圈时,您会得到可能沿着用户触摸路径的8个、12个或甚至20个点的touchMoved事件。因此,当您连接这些点时,您得到的是一个有八个、十二个或二十个边的锯齿形图形,而不是一个漂亮的圆。我认为OP正在寻找一种进行曲线平滑处理的方法--也许是用样条曲线或类似方法。 - Olie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接