Question

I have an Image in an Iphone App, I would like when a user taps a location within a defined area (range of locations or an area defined by the rectangle), it triggers another event. I know how to get a single location, But I don't know how to define a rectangular area. I am looking for a simple way to implement it. Thank you

Was it helpful?

Solution

If you want to make the rectangle visible you can add image view to your view and set up the tap recogniser. But if you don't want to make the rectangle visible you can override touchesBegan:withEvent: method and use CGRectContainsPoint:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    CGRect rect = CGRectMake(0.0, 0.0, 100, 100); //<- this is the rectangle you do check on
    if (CGRectContainsPoint(rect, touchLocation)) {
        NSLog(@"You tapped inside rectangle");
    }
    else {
        NSLog(@"You missed rectangle");
    }
}

OTHER TIPS

Define your area as a CGRect and get the CGPoint of the touch. Then use CGRectContainsPoint to check for a hit.

If you need to create the CGRect from a list of points then you need to iterate the points and find the max and min x and y values, then you can create the CGRect with:

CGRectMake(minX, minY, maxX - minX, maxY - minY);

Maybe you can create a UIView and add a gesture recognizer like this:

UIView *customView = [UIView new];
customView.frame = CGRectMake(....); // as Wain suggest
[self.view addSubview:customView];

UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget: self
  action: @selector(someMethod)];
[customView addGestureRecognizer:tapGesture];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top