Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I detect a touch over a specific area

Currently I see that a touch event will show me the UIView where the touch occured. But what if I need to detect a touch of some non rectangular shape, like a circle. How would I go about doing something like that ?

Basically I want to do something only if the user touches somewhere within a circular area that's not visible.

Any help/direction is appreciated, TIA!

like image 862
dizy Avatar asked Mar 15 '09 02:03

dizy


1 Answers

You would do it like so. Note that 'locationInView' will return the coordinates of the touch with respect to the specified view, so a touch in the top-left corner of a view will return (0,0) regardless of where that view is onscreen.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{   
  UITouch *touch = [touches anyObject];

  // gets the coordinats of the touch with respect to the specified view. 
  CGPoint touchPoint = [touch locationInView:self];

  // test the coordinates however you wish, 
  ...
}

To test against a sphere you would calculate the distance from the touch point to the center of the sphere, then check whether this was less than the sphere radius.

like image 120
Andrew Grant Avatar answered Oct 06 '22 01:10

Andrew Grant