0

UIViews とそれに対応するスーパービューで使用される座標は何ですか? ユーザーが触れることができる「廊下」を検出したいこのコードがあります...この画像に似ています:代替テキスト 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 で、touchx と y は 100 と 200 です...

したがって、「廊下」の NSLog が呼び出されることはありません。

ありがとう

4

1 に答える 1

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)notでチェックする必要がありtouch.x, touch.yます。

于 2010-07-30T11:32:49.490 に答える