问题
What are the coordinates used in UIViews and their corresponding superviews? I have this code which i would like to detect a 'corridor' where the user can touch... similar to this image:alt text http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.png
This is the code i have:
CGPoint touch = [recognizer locationInView:[shuttle superview]];
CGPoint centre = shuttle.center;
int outerRadius = shuttle.bounds.size.width/2;
int innerRadius = (shuttle.bounds.size.width/2) - 30;
if ((touch.x < outerRadius && touch.y <outerRadius)){
NSLog(@"in outer");
if(touch.x > innerRadius && touch.y > innerRadius) {
NSLog(@"in corridor");
}
}
The radii are approximately 500 and 600, and the touch
x and y are 100 and 200...
Thus, the NSLog "in corridor" never gets called.
Thanks
回答1:
Your condition is wrong. The corridor according to it is a square, with its center at (0, 0) instead of shuttle.center
. Try
CGFloat dx = touch.x - centre.x;
CGFloat dy = touch.y - centre.y;
CGFloat r2 = dx*dx + dy*dy;
if (r2 < outerRadius*outerRadius) {
NSLog(@"in outer");
if (r2 > innerRadius*innerRadius)
NSLog(@"in corridor")
}
instead.
Even if the corridor is indeed expected to be a square, you should check with fabs(dx), fabs(dy)
not touch.x, touch.y
.
来源:https://stackoverflow.com/questions/3370997/uiview-touch-location-coordinates