iOS绘制带箭头的线条,随着手指触摸结束点旋转起始或结束点

5

我需要帮助制作一个绘图演示。

当用户使用手指画一条线时,这条线的两端会有方向箭头。当他们放开手指时,它会在线的中心处画上“?”(问号)。

然后,当用户点击“?”时,它将显示一个新视图,用户可以输入值,该值在该线上。

我们可以在捕获图像上添加多条线,并且我们可以删除选定的线。

我不明白如何开始开发这些功能,所以请给我一个想法、任何链接或建议来开始开发这个功能。

enter image description here


也许这个链接会有帮助:https://dev59.com/-mYr5IYBdhLWcg3wn7cc - Nitin Gohel
@NitinGohel 感谢您提供的链接,我已经实现了那段代码并制作了一个演示,但对我没有帮助,还有其他的想法吗? - Nikunj Jadav
没有想法,唤醒你的灵感。:) - Rushabh
我猜你可以用这个:http://code4app.net/ios/Quartz2d-Demo/515a7e116803fa2f60000003 - Eddwin Paz
@Rayfleck,你有什么想法可以帮我开发这个功能吗? - Nikunj Jadav
@NikunjJadav请将我的答案选为最佳答案! - Wyetro
2个回答

3
您应该使用UITapGestureRecognizerUIBezierPath。让用户在一个点上点击,然后在第二个点上点击,然后在两个点之间创建一个UIBezierPath。要在中间添加问号,您可以使线从第一个点到(第1个点和第2个点之间距离的一半-20pt)的位置。然后对另一半线也做同样的操作(这样您现在就有了一条带空格的线)。

感谢您的帮助,但我需要当用手指开始画线时,它会显示起点,并在放开手指时在该位置显示带有“?”的终点,并且还可以通过触摸手指旋转起点或终点。 我想您告诉我,在视图上第一次点击会创建起点,并在第二次点击时显示连接两个点之间的线段的终点,但我需要上述概念,请给我任何想法或建议,也感激您的帮助。 - Nikunj Jadav
刚刚阅读了UIBezierPath参考文档。你会需要它的。你也可以尝试使用Core Graphics进行绘图。 - Wyetro
谢谢您的回复,我已经参考了苹果的UIBezierPath文档,但如果可能的话,请给我发送链接,这对我来说将不胜感激。 - Nikunj Jadav
这应该足够了:http://www.raywenderlich.com/32283/core-graphics-tutorial-lines-rectangles-and-gradients - Wyetro

2
您可以利用核心图形框架在iOS中绘制形状。这使您可以绘制线条、圆圈、箭头、矩形等等。下面是一个示例代码,用于在两个点之间绘制一条直线(取自:我如何在iPhone上绘制一条直线?):
CGContextRef c = UIGraphicsGetCurrentContext();

CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
CGContextSetStrokeColor(c, red);
CGContextBeginPath(c);
CGContextMoveToPoint(c, 5.0f, 5.0f);
CGContextAddLineToPoint(c, 50.0f, 50.0f);
CGContextStrokePath(c);

首先定义一个UIView的子类来创建一个绘制空间。然后使用UITapGestureRecognizer来检测轻击手势。正如@WyattMufson在他的答案中所建议的,我会让用户轻击一次以获取线段的起点,然后再轻击一次以获取终点。这样做是为了确保只能绘制直线。
一旦您有了起点和终点,就可以计算中点,并在两点之间连接一个“?”字符。然后将这些线段坐标(起点、中点和终点)保存在某种数据结构中,以跟踪已经绘制的所有线段。
当用户轻击特定的线段时,您可以使用保存的线段坐标信息来检测轻击是否发生在线段上(您将需要进行一些计算来完成此操作)。如果是,则显示一个弹出窗口,接受用户输入。一旦用户输入了值,关闭弹出窗口并用新值替换“?”字符。
对于删除线条,您可以使用UILongPressGestureRecognizer。用户会在绘制的线上轻按并长按,这将弹出一个气泡窗口以确认用户是否要继续进行删除操作。如果是,则访问保存的线坐标以检测长按是否发生在线上。如果是,则擦除该线。
以下是一些参考资料,可帮助您入门:

感谢您的帮助,但我需要这样一个功能:当用手指开始画线时,它会显示起点,并在离开手指时在线的中心显示“?”作为终点。同时,也可以通过手指触摸从起点或终点旋转。我记得您告诉我,在视图上第一次点击会创建起点,在第二次点击时会显示终点并在两个点之间绘制线条,但我需要上述概念,请给我任何想法或建议,同时非常感谢您的帮助。 - Nikunj Jadav

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