UIViews中使用的坐标及其相应的超视图是什么?我有这个代码,我想检测用户可以触摸的“走廊”......类似于这张图片:alt text http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.png
这是我的代码:
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");
}
}
半径约为500和600,touch
x和y分别为100和200 ......
因此,NSLog“在走廊里”永远不会被召唤。
谢谢
答案 0 :(得分:1)
你的病情有误。根据它的走廊是一个正方形,其中心位于(0,0)而不是shuttle.center
。尝试
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")
}
代替。
即使走廊确实是一个正方形,您也应该使用fabs(dx), fabs(dy)
而不是touch.x, touch.y
进行检查。