UIView触摸位置坐标

UIView触摸位置坐标,uiview,coordinates,superview,Uiview,Coordinates,Superview,UIView及其对应的SuperView中使用的坐标是什么?我有这个代码,我想检测一个用户可以触摸的“走廊”。。。与此图像类似: 这是我的代码: CGPoint touch = [recognizer locationInView:[shuttle superview]]; CGPoint centre = shuttle.center; int outerRadius = shuttle.bounds.size.width/2; int innerRadius

UIView及其对应的SuperView中使用的坐标是什么?我有这个代码,我想检测一个用户可以触摸的“走廊”。。。与此图像类似:

这是我的代码:

    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");  
        }
    }
CGPoint touch=[recognizer locationInView:[shuttle superview]];
CGPoint中心=梭式中心;
int outerRadius=shuttle.bounds.size.width/2;
intinnerRadius=(shuttle.bounds.size.width/2)-30;
if((touch.xinnerRadius){
NSLog(“走廊内”);
}
}
半径约为500和600,
touch
x和y分别为100和200

因此,NSLog“在走廊中”永远不会被调用


谢谢

您的情况不对。根据它,走廊是一个正方形,其中心位于(0,0)而不是
穿梭机。中心
。试试看

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")
}
CGFloat dx=touch.x-center.x;
cgdy=touch.y-center.y;
CGFloat r2=dx*dx+dy*dy;
if(r2<外辐射*外辐射){
NSLog(@“外部”);
如果(r2>内半径*内半径)
NSLog(“走廊内”)
}
相反


即使走廊确实是一个正方形,您也应该检查
fabs(dx),fabs(dy)
不是
touch.x,touch.y

@joec:No.半径应该是
梭形.边界.大小.宽度/2
。你在计算周长。好的,我的视野是200宽,因此在第一个
如果
中,外径=100,r2@joec:你的
touch
centre
?centre={175200}touch={198131}@joec:
dx
dy
应该是23和-69,因此
r2==dx*dx+dy*dy
应该是5290.70*70=4900<5290<10000=100*100。确保正确获得这些数字。