2009-07-10 9 views
11

Come si implementano i gesti di pizzicamento su iPhone? Ho familiarità con l'utilizzo di eventi touch sull'iPhone, ma sono estremamente pigro e non voglio re-inventare la ruota per qualcosa di così diffuso come i gesti PINCH ... Il codice sorgente oi collegamenti ad esso sarebbero utili.Come fare gesti di pizzicamento su iPhone?

+1

guarda questo esempio su zoom pizzico http://cocoabugs.blogspot.com/2011/03/pinch-zoom-using-uipinchgesturerecogniz.html –

risposta

8

È necessario implementarlo manualmente utilizzando alcuni calcoli di base.

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

Questi sono i metodi delegati che è necessario implementare nella propria applicazione.

È necessario ottenere la distanza tra i due tocchi, quindi calcolare le variazioni di distanza nel proprio codice.

L'equazione matematica che si utilizza per ottenere la distanza è chiamata dot product

Voglio solo far notare che l'equazione che usano nel tutorial citato non è corretto. L'ho aggiornato per includere il valore assoluto che è mancato nel tutorial.

Questo è il prodotto scalare:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint 
{ 
    float xDist = fromPoint.x - toPoint.x; 
    float yDist = fromPoint.y - toPoint.y; 

    float result = sqrt(pow(xDist,2) + pow(yDist,2)); 
    return result; 
} 

Edit: Ho fatto un errore nel mio precedente risposta .... è stato un po 'che non ho fatto niente di tutto questo tipo di matematica.

Se non si esegue il root del risultato, non si ottiene la distanza reale tra i punti. Questo è chiamato calcolare la grandezza tra due vettori.

Questo è il modo corretto per farlo. Se si desidera omettere lo sqrt, non si avrà la distanza esatta tra i due punti.

Se non si quadra la risposta, il codice funzionerà ma utilizzerà misure molto più grandi dei valori effettivi. Quindi, in futuro, se hai bisogno di ottenere la distanza tra i due punti, restituirà qualcosa come 90000 invece della distanza effettiva dei pixel che sarebbe 300px.

+0

Ummm ...Non sei sicuro di quanto possa essere utile il link "prodotto punto" che hai citato, ma grazie per una risposta almeno ... – RexOnRoids

+0

Senza di esso non puoi calcolare la distanza tra i due tocchi. È essenziale. –

+0

Thx - Il codice sorgente è molto più facile da capire in questo caso. Non ero disposto a sedermi e tentare di assorbire un'intera pagina wiki sulla complessità del "prodotto di punti" LOL – RexOnRoids

1

Se si sta cercando un esempio di codice semplice del gesto di pizzico, utilizzo il metodo descritto da Brock nell'applicazione di esempio I describe here (nella penultima e ultima versione dell'applicazione in quella pagina). I gesti di pizzico sono usati per scalare un paio di livelli di Animazione di base in quell'esempio.

Tutto ciò che sta descrivendo fino al calcolo della distanza è semplicemente il Teorema di Pitagora applicato tra due punti (con le distanze X e Y come le due facce di un triangolo rettangolo).

6

hmmm ..... sembra che alcune persone siano estremamente confuse su come utilizzare la matematica di base. il prodotto punto è totalmente irrelavent e semplicemente confonde i problemi. il punto di punta tra 2 vettori viene utilizzato per calcolare l'angolo tra di essi.

In realtà è necessario utilizzare il teorema di Pitagora. Dot non è NIENTE a che fare con la ricerca della distanza tra i punti - solo per quanto riguarda la piramide!

+0

per trovare la distanza tra due punti: sqrt (punto (p2-p1, p2-p1)) – twerdster

8

Abbastanza sicuro che le soluzioni presentate qui siano state obsolete, a favore dell'utilizzo della nuova classe UIPinchGestureRecognizer in iOS 3.2 e successive.

+2

Non è così rilevante finché ci sono tonnellate di <3,2 dispositivi là fuori. – Jonny

Problemi correlati