UIView сенсорные координаты местоположения - PullRequest
0 голосов
/ 30 июля 2010

Какие координаты используются в 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, а touch x и y равны 100 и 200 ...

Таким образом, NSLog "в коридоре" никогда не вызывается.* Спасибо

1 Ответ

1 голос
/ 30 июля 2010

Ваше состояние не так. Коридор в соответствии с ним представляет собой квадрат с центром в (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.

...