2009-03-15 8 views
6

Attualmente vedo che un evento di tocco mostrerà l'UIView in cui si è verificato il tocco. Ma cosa succede se ho bisogno di rilevare un tocco di una forma non rettangolare, come un cerchio. Come potrei fare qualcosa del genere?Come posso rilevare un tocco su un'area specifica

Fondamentalmente voglio fare qualcosa solo se l'utente tocca da qualche parte all'interno di un'area circolare che non è visibile.

Qualsiasi aiuto/direzione è apprezzato, TIA!

risposta

7

Si farebbe così. Si noti che 'locationInView' restituirà le coordinate del tocco rispetto alla vista specificata, quindi un tocco nell'angolo in alto a sinistra di una vista ritornerà (0,0) indipendentemente da dove tale visualizzazione è sullo schermo.

-(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, 
    ... 
} 

da confrontare con una sfera che si calcolare la distanza dal punto di contatto al centro della sfera, quindi verificare se questo era inferiore al raggio della sfera.

+0

Grazie Andrew! Qualche consiglio su come trovare alcune forme non standard? Immagino che sarebbe qualcosa come disegnare una forma con CGContext, e poi in qualche modo controllarla? o cosa ? – dizy

+0

Dovresti usare CGContext per disegnare ma per il calcolo "IsInside" dovrai semplicemente usare la matematica. Se riesci ad esprimere le forme come poligoni, è piuttosto semplice. Questo collegamento può aiutare: http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ –

Problemi correlati