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];


    }
È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top