iOS: Drawing a Rectangle on an ImageView and Adjusting Borders

前端 未结 2 411
天命终不由人
天命终不由人 2021-01-06 13:16

Attached 1 is a screenshot from an app called GeniusScan where you can photograph any document and an adjustable rectangular grid shows on the imageview. You can easily adju

相关标签:
2条回答
  • 2021-01-06 13:42

    This isn't actually drawing on top of UIImageView. It's actually an overlay (view) on top of the UIImageView. You need to keep track of 4 points (have 4 views as subview of the layer), track their positions, once moved, use drawRect: to draw lines based on the 4 points.

    The way I've implemented it in my app is, I overlay the UIImageView with a transparent 'SelectionView' (a custom view that I wrote). The selectionView contains 4 custom subview of class 'Vertex'. The vertex talk back to the selectionView via protocol method every time user touches/moves it (it's actually not important which vertex moved, just that it moved):

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

    Then the selectionView knows that it needs to re-draw, so it calls setNeedsDisplay which calls internally calls drawRect (you should never call drawRect) where I do the actual drawing of the bounding rect. Basically, iterate through each vertex and draw a line using Quartz APIs and fill it with semi transparent/hollow color.

    This is how I am doing it atleast, I am sure there are other ways.

    0 讨论(0)
  • 2021-01-06 13:44

    Dude:

    I created a demo that solves both questions:

    1- How can I draw and interact with the grid on the imageview?

    By Adding 4 views that will act as interactive control points by adding UIPanGestureRecognizer and then drawing the grid using CAShapeLayer on top of your view.

    2- How can I return the corner points of the grid to my view controller.

    You must keep references to the four control points of your grid.

    Here's the link to my code.

    0 讨论(0)
提交回复
热议问题