2013-02-11 7 views
6
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

Attualmente sto ricevendo 1 oggetto inCome disabilitare i tocchi Began: per i multi-touch?

touches 

quando faccio un rubinetto con due dita contemporaneamente (tenendo premuto il tasto opzione e cliccando sul simulatore). Credo che ciò sia dovuto al fatto che non ho abilitato la proprietà

multipleTouchEnabled 

della vista allegata. Voglio fare in modo che non registri questo evento per i multi-touch.

Guardando la questione, sembra che avrebbe funzionato se abilito multipleTouchEnabled, e poi fare

if ([touches count] > 1) { 
    return; 
} 

nel mio

touchesBegan: 

Tuttavia, questo sembra strano a me in che io sono ABILITAZIONE di multipleTouchEnabled per DISATTIVARE più tocchi e sono preoccupato se ci saranno effetti collaterali. C'è un modo migliore per risolvere il mio problema?

+3

Ricordare: su un dispositivo reale, è improbabile che le dita dell'utente tocchino lo schermo esattamente nello stesso momento. Dovresti essere preparato per '-touchesBegan:' per essere chiamato due volte (o più) con tocchi diversi. –

risposta

0

Si potrebbe utilizzare un sistema di riconoscimento gesto, questo è probabilmente più formato leggibile rispetto al tocchi delegato, anche se il codice funziona:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)]; 
gestureRecognizer.numberOfTouchesRequired = 2; 
0

Se è obbligatorio utilizzare NSTouches quindi è possibile utilizzare i seguenti metodi per ottenere il compito desiderato raggiungere.

[view setMultipleTouchEnabled:NO]; 
[view setExclusiveTouch:YES]; 

più sopra si può giocare con

setMultipleTouchEnabled:

mantenendo setExclusiveTouch

di vista SI

1

Prima aggiungere un sistema di riconoscimento gesto per la visualizzazione:

UITapGestureRecognizer *multipleTouches = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMultiTap:)]; 
multipleTouches.numberOfTouchesRequired = 2; 
[yourViewName addGestureRecognizer:multipleTouches]; 
[multipleTouches release]; 

Spero che vi aiuterà.

2

Dovresti solo essere in grado di disabilitare la proprietà multitouch sulla vista, in IB devi effettivamente andare al pannello laterale e fare clic sulla cosa che dice vista accanto al proprietario dei file per ottenerla e quindi deselezionarla, oppure puoi farlo nel codice in viewdidload:

self.view.multiTouchEnabled = NO;

0

È possibile utilizzare questa linea per evitare più tocchi in un punto, impostare il tocco esclusivo "Sì" per la visualizzazione.

[self.view setExclusiveTouch:YES];