2012-09-21 23 views
8

En iOS 6 beta 4 e iOS 5.1.1, he tenido toques de izquierda/derecha que permiten a los usuarios deslizar entre diferentes QLPreviewControllers, alojados en un UIViewController.IOS 6 UIGestures (Deslizar) deja de funcionar con QLPreviewController

En la versión lanzada de iOS 6, los golpes se ignoran por completo.

Intenté poner una UIView como una subvista del controlador de vista previa en un intento de obtener la vista que hospeda el controlador de vista previa para interceptar los golpes antes de que el controlador de vista previa tenga la oportunidad de tragarlos, pero estos nunca se disparan.

Cualquiera ha visto esto o sabe de un trabajo alternativo.

Gracias,

+4

Estoy teniendo un problema similar con un proyecto en el que estoy involucrado. –

Respuesta

2

Tuve el mismo problema pero con UITapGestureRecognizer no funciona en QLPreviewController. En iOS 6, esa cosa es como un agujero negro para objetos UIGestureRecognizer ... ¡nada sale de allí!

Sin embargo, encontré una solución. Estoy de subclases QLPreviewController, así que en mi subclase He abusado del nuevo método viewWillLayoutSubviews (relativamente) y se añade el siguiente fragmento:

UIView *overlay = [[UIView alloc] initWithFrame:self.view.frame]; 
overlay.backgroundColor = [UIColor whiteColor]; 
overlay.alpha = .002f; 
for (UIView *v in self.view.subviews) 
{ 
    [v addSubview:overlay]; 
} 
[overlay release]; 

Puede ser una exageración, pero básicamente fui a la totalidad de los subvistas vistazo rápido y añadí una vista para ellos que aceptaría el gesto. Fui con .002 alpha porque hacerlo más bajo provocaría que los gestos sean ignorados nuevamente.

+0

Fantástico, gracias por esto. Si bien esto funciona, me gustaría señalar que se pierde todo el comportamiento estándar de QLPreviewController, zoom, desplazamiento, etc. –

+0

¿No es esto peligroso? ¿Agregar la misma instancia de UIView como subvista a múltiples vistas? Una instancia de una vista solo puede aparecer una vez en una jerarquía de vistas. – Echelon

+0

Fue un truco para empezar. Como dijo Ben, bloquea los gestos incorporados de QLPreviewController. De hecho, me rendí y fui con UIDocumentInteractionController. Tampoco puedo poner gestos personalizados sobre eso, pero fue una mejor coincidencia para lo que mi equipo estaba buscando. Todavía no estoy contento, pero tuve que seguir adelante. = -/En cuanto a su pregunta, no tuve problemas para volver a utilizar la vista.Pero puede hacer que el ciclo for cree una nueva vista para cada superposición. – ghostatron

1

Su intento de solución estaba cerca, pero, probablemente, al revés de lo que debería haber hecho. En lugar de agregar otra vista como una subvista del controlador de vista previa, agregue el controlador de vista previa como una subvista de UIView.

Subvista del controlador de vista previa dentro de una UIView estándar. Luego, reasigne sus gestos a la colección gestureRecognizers de UIView, eliminándolos de la colección de QLPreviewController.

No estoy seguro de por qué esto cambió, pero tuve el mismo problema con mi aplicación, a excepción de mí, era la UITableView que ya no se desplazaba.

+1

Hola David, gracias por su sugerencia, probé el enfoque y funciona en iOS 5, pero en iOS 6, el QLPreviewController todavía bloquea todos los gestos una vez que se carga el documento. –

2

También he encontrado que, utilizando el mismo código, UIGestureRecognizers ha dejado de funcionar en iOS 6. Pero no está tan roto. El proyecto Apple Development Sample "SimpleGestureRecognizers" todavía funciona. Después de comparar el código, encontré que explícitamente "addGestureRecognizer" resolvió el problema (además de todos los demás pasos que solía hacer en IB). Asumiendo que su uno de sus nombres IBOutlets leftSwiftRecognizer, se podría hacer:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    .... 
    // swipe recognizer 
    [self.view addGestureRecognizer:self.leftSwiftRecognizer]; 

} 
Cuestiones relacionadas