29

I have a UIImageView and I have a CGPoint on the screen. I want to be able to test that point to see if it is in the UIImageView. What would be the best way to do this?

Paulo Mattos
  • 18,845
  • 10
  • 77
  • 85
Blane Townsend
  • 2,888
  • 5
  • 41
  • 55

5 Answers5

51

CGPoint is no good with a reference point. If your point is in window's coordinates then you can get it using

CGPoint locationInView = [imageView convertPoint:point fromView:imageView.window];
if ( CGRectContainsPoint(imageView.bounds, locationInView) ) {
    // Point lies inside the bounds.
}

You may also call pointInside:withEvent: method

if ( [imageView pointInside:locationInView withEvent:nil] ) {
    // Point lies inside the bounds
}
Paulo Mattos
  • 18,845
  • 10
  • 77
  • 85
Deepak Danduprolu
  • 44,595
  • 12
  • 101
  • 105
15

Tested in Swift 4

view.frame.contains(point)
Den
  • 3,179
  • 29
  • 26
2
if(CGRectContainsPoint([myView frame], point))

where point is your CGPoint and myView is your UIImageView

Kal
  • 24,724
  • 7
  • 65
  • 65
2

I'll assume you have a full-screen window (pretty reasonable, I think). Then you can transform the point from the window's coordinate space to the UIImageView's using:

CGPoint point = ...
UIWindow window = ...
UIImageView imageView = ...
CGPoint transformedPoint = [window convertPoint:point toView:imageView];

Then, you can test if the point is in the image view's frame as follows:

if(CGRectContainsPoint(imageView.frame, transformedPoint))
{
    // do something interesting....
}
Mac
  • 14,615
  • 9
  • 62
  • 80
0

In Swift 3

let isPointInFrame = UIScreen.main.bounds.contains(newLocation)
Darshit Shah
  • 2,366
  • 26
  • 33