2010-07-30 3 views
0

Каковы координаты, используемые в UIViews и их соответствующих наблюдениях? У меня есть этот код, который я хотел бы, чтобы обнаружить «коридор», в котором пользователь может коснуться ... похожий на это изображение: alt text http://img17.imageshack.us/img17/4416/bildschirmfoto20100721u.pngКоординаты местоположения UIView координаты

Это код, у меня есть:

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 «в коридоре» никогда не вызывается.

Thanks

ответ

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.

+0

Я исчисляю радиусы вправо? – joec

+0

@joec: Нет. Радиус должен быть просто «shuttle.bounds.size.width/2'. Вы вычисляете окружность. – kennytm

+0

Итак, мой взгляд шириной 200, таким образом externalRadius = 100, в первом 'if', r2 <100 * 100 всегда будет true, так как 10 000 всегда больше. Я хочу, чтобы в коридоре было указано 30 точек в ширину, поэтому innerRadius = 70, поэтому 70 * 70 снова всегда больше r2. Должны ли координаты находиться в супервизии «челнока», как они есть сейчас? Большое спасибо. – joec

 Смежные вопросы

  • Нет связанных вопросов^_^