Pregunta

Esto es de esperar, pero me parece que no puede encontrar un tiempo de ejecución que funciona correctamente, ya que parece que era una API privada antes !!!!

En el momento en que tengo y responde OS3.1.3 al selector 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];


    }
¿Fue útil?

Solución

Se debe comprobar la versión del sistema explícitamente:

NSString *currentSystemVersion = [[UIDevice currentDevice] systemVersion];
if([currentSystemVersion compare:@"3.2"] == NSOrderedAscending) {
    //add gesture recognizer
} else {
    // :(
}

Otros consejos

UIGestureRecognizer no es soportado antes de iOS 3.2. Incluso si existe el método addGestureRecognizer:, eso no significa que es seguro de usar.

Fue realmente un API privado y no se admite en las versiones anteriores a la 3.2.

doc de Apple dice:

  

Para determinar en tiempo de ejecución si se puede utilizar reconocedores en gesto   su aplicación, prueba de si existe o no la clase y, si lo hace,   asignar una instancia y ver si responde cheque al selector   locationInView :. Este método no se agregó a la clase hasta iOS 3.2.

Código de ejemplo:

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

explicación necesaria:

  

Para determinar si una clase está disponible en tiempo de ejecución en un determinado iOS   liberación, por lo general comprobar si la clase es nula. Desafortunadamente,   esta prueba no es limpia precisa para UIGestureRecognizer. A pesar de que   esta clase estaba a disposición del público a partir de iOS 3.2, fue en   el desarrollo de un corto período de tiempo antes de eso. Aunque existe la clase de   una versión anterior, el uso de la misma y otras clases de gestos son reconocedor   No apoyado en esa versión anterior. No se debe intentar utilizar   las instancias de esas clases.

Confirmar el texto completo aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top