用手指在iPhone上绘制直线

Tre*_*vor 5 xcode opengl-es objective-c uiviewcontroller drawrect

背景:我正在尝试创建一个非常简单的iPhone应用程序,该应用程序将允许用户用手指在屏幕上绘制多条直线。

我正在使用这两种方法UIViewController来捕获每条线的端点的坐标。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)

问题: 我希望touchesEnded线条在触发后立即显示,然后继续在屏幕上绘制更多线条。我该怎么做呢?我不一定需要代码,但是我需要有关如何将其组合在一起的总体思路的帮助。另外,我也不是xib的忠实拥护者,如果可能会影响答案,我希望通过编程方式全部完成。

我尝试过的内容:我尝试使用Quartz 2d,但似乎要使用它,必须在drawRect单独的子类化视图的方法中进行绘制。所以我必须为每行创建一个新视图吗?然后我的坐标将被弄乱b / c我必须将touches位置从UIViewController转换为视图。

我也尝试过使用OpenGL,但在使用GLPaint示例作为模板方面取得了一些成功,但是OpenGL在屏幕上绘制一些直线似乎有些过头。

Kur*_*vis 3

您不需要多个视图,也不需要 OpenGL。

创建 的子类UIView- 调用它CanvasView

创建一个对象来表示画布中的“一条线”——它将是NSObject具有CGPoint开始和结束属性的子类。

CanvasView应该保留画布中的线条数组。

在 中-[CanvasView drawRect:],循环遍历数组中的行,并绘制每一行。

在 中-[CanvasView touchesBegan:withEvent:],将起点存储在实例变量中。在 中-[CanvasView touchesEnded:withEvent:],用起点和终点创建一条新线,并将其添加到线数组中。调用[self setNeedsDisplay]以重新绘制视图。