2009-03-15 5 views
6

Actualmente veo que un evento táctil me mostrará la UIView donde ocurrió el toque. Pero qué sucede si necesito detectar un toque de alguna forma no rectangular, como un círculo. ¿Cómo voy a hacer algo así?Cómo detecto un toque en un área específica

Básicamente quiero hacer algo solo si el usuario toca algún lugar dentro de un área circular que no es visible.

¡Se agradece cualquier ayuda/dirección, TIA!

Respuesta

7

Lo harías así. Tenga en cuenta que 'locationInView' devolverá las coordenadas del toque con respecto a la vista especificada, por lo que un toque en la esquina superior izquierda de una vista devolverá (0,0) independientemente de dónde esté esa vista en la pantalla.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

    // gets the coordinats of the touch with respect to the specified view. 
    CGPoint touchPoint = [touch locationInView:self]; 

    // test the coordinates however you wish, 
    ... 
} 

Para probar contra un sector le calcular la distancia desde el punto de contacto con el centro de la esfera, a continuación, comprobar si este es menor que el radio de la esfera.

+0

Gracias Andrew! ¿Algún consejo sobre cómo descifrar algunas formas no estándar? Supongo que sería algo así como dibujar una forma con CGContext, y luego de alguna manera contrastando con eso. o que ? – dizy

+0

Utilizaría CGContext para dibujar pero para el cálculo "IsInside" solo tendrá que usar matemática. Si puedes expresar las formas como polígonos, es bastante sencillo. Este enlace puede ayudar: http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ –

Cuestiones relacionadas