iOS:在ImageView上绘制矩形并调整边框

时间:2012-11-27 22:32:54

标签: objective-c ios core-graphics

附加1是来自名为GeniusScan的应用程序的屏幕截图,您可以在其中拍摄任何文档,并在imageview上显示可调整的矩形网格。您可以用手指轻松调整网格边框,以选择要扫描的图像部分。然后它将转变为正确的前景。

1-如何在imageview上绘制网格并与之交互?

2-如何将网格的角点返回到我的视图控制器。

enter image description here

更新:我发现了一个名为BJImageCropper的精彩类,它允许使用手指来调整边框,但仅限于矩形框。任何人都可以建议如何更新它以支持像GeniusScan应用程序中的形状?

2 个答案:

答案 0 :(得分:5)

多德:

我创建了一个解决这两个问题的演示:

1-如何在imageview上绘制网格并与之交互?

通过添加UIPanGestureRecognizer添加4个视图作为交互式控制点,然后在视图顶部使用CAShapeLayer绘制网格。

2-如何将网格的角点返回到我的视图控制器。

您必须保持对网格的四个控制点的引用。

这是指向code的链接。

答案 1 :(得分:2)

这实际上并没有在UIImageView上绘制。它实际上是UIImageView顶部的叠加层(视图)。你需要跟踪4个点(有4个视图作为图层的子视图),跟踪它们的位置,移动后,使用drawRect:根据4个点绘制线条。

我在我的应用程序中实现它的方式是,我用透明的'SelectionView'(我写的自定义视图)覆盖UIImageView。 selectionView包含4个“Vertex”类的自定义子视图。每次用户触摸/移动它时,顶点都会通过协议方法与selectionView对话(它实际上并不重要的是哪个顶点移动了,只是它移动了):

- (void)vertexMoved:(Vertex *)vertex;

然后,selectionView知道它需要重新绘制,因此调用setNeedsDisplay调用内部调用drawRect(你永远不应该调用drawRect)我在那里实际绘制边界矩形。基本上,遍历每个顶点并使用Quartz API绘制一条线并用半透明/空心颜色填充它。

这就是我至少这样做的方式,我相信还有其他方法。