UIGestureRecognizer si blocca su
-
30-09-2019 - |
Domanda
Questo è da aspettarselo, ma io non riesco a trovare un runtime che funziona correttamente come sembra è stato un privato API prima !!!!
Al momento ho e risponde OS3.1.3 al selettore addGestureRecognizer !!!!
if ( [self.view respondsToSelector:@selector(addGestureRecognizer:)] ) {
UIGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(morePress)];
[self.view addGestureRecognizer:recognizer];
recognizer.delegate = self;
[recognizer release];
}
Soluzione
Si dovrebbe controllare per la versione del sistema in modo esplicito:
NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
//add gesture recognizer
} else {
// :(
}
Altri suggerimenti
UIGestureRecognizer non è supportato prima di iOS 3.2. Anche se esiste il metodo addGestureRecognizer:
, questo non significa che sia sicuro da usare.
E 'stato davvero un api privato e non supportato nelle versioni precedenti alla 3.2.
doc di Apple dice:
Per determinare in fase di esecuzione se è possibile utilizzare sistemi di riconoscimento gesto l'applicazione, verificare se esiste la classe e, se lo fa, allocare un'istanza e vedere se controllo risponde al selettore locationInView :. Questo metodo non è stato aggiunto alla classe fino a iOS 3.2.
Codice di esempio:
UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
if (![gestureRecognizer respondsToSelector:@selector(locationInView:)]) {
[gestureRecognizer release];
gestureRecognizer = nil;
}
// do something else if gestureRecognizer is nil
explenation:
Per determinare se una classe è disponibile in fase di esecuzione in una data iOS rilascio, in genere verificare se la classe è pari a zero. Sfortunatamente, questo test non è in modo pulito accurato per UIGestureRecognizer. Sebbene questa classe era disponibile al pubblico a partire da iOS 3.2, è stato in sviluppo un breve periodo prima di tale. Sebbene la classe esiste in una versione precedente, l'uso di essa e le altre classi gesto riconoscitore sono non supportato in quella versione precedente. Non si dovrebbe cercare di utilizzare istanze di tali classi.
Scopri il testo completo qui .