Que no se puede entrar UIScreenEdgePanGestureRecognizer
a trabajar cuando me cree cuando lo añado a mi punto de vista controlador usando la Interface Builder, así que me estoy preguntando aquí para establecer si estoy haciendo algo mal o si hay un error en Xcode.
Aquí están los pasos para reproducir:
- Crear un nuevo proyecto de Xcode uso de la «Vista Única de la Aplicación de la plantilla» para iOS.
- Agregar un
UIView
a la vista principal del controlador mediante la función de arrastrar desde la Biblioteca de Objeto en el Interface Builder - Agregar un
UIScreenEdgePanGestureRecognizer
a la vista mediante la función de arrastrar desde la Biblioteca de Objeto en el Interface Builder - Asegurarse de que el gesto reconocedor está habilitado y que un borde seleccionado:
- Abrir el editor asistente de la
ViewController
clase y la tecla ctrl y arrastre desde laUIScreenEdgePanGestureRecognizer
a laViewController
aplicación de bloque para crear una nuevaIBAction
«Añadir un punto de interrupción en la acción del cuerpo del método para probar si el borde de la cacerola gesto está siendo reconocido
El código resultante es el siguiente:
Si ejecuto la aplicación en mi dispositivo (iPhone 6 con iOS 8.02) el punto de interrupción no obtener golpeó cuando hago un gesto de borde.
Hay algo que me falta?
ACTUALIZACIÓN: este fue presentada como un error de Apple (rdar://18582306) en 08-Oct-2014 y todavía no se resuelve en Xcode 6.4 (6E35b)
He creado un proyecto para poner a prueba tu pregunta y encontré el mismo problema que usted hizo. Aquí están los escenarios que para probar:
Hice exactamente como lo hizo, mediante el Interface Builder, para construir el borde de la pantalla del gesto. La única diferencia en mi código es que me ponga una línea de código en el selector para que el depurador tendría algo para dejar en el. El depurador no lograron detener exactamente como usted los encontró.
Entonces creé un adicional de movimiento utilizando el gesto de pellizcar en el mismo punto de vista utilizando el Interface Builder y yo era capaz de conseguir el depurador para detener dentro de ese selector. Así Interface Builder, parece ser capaz de construir otros gestos correctamente.
En el ViewController.h archivo que incluye el UIGestureRecognizerDelegate.
En el ViewController.m archivo que he implementado el gesto manualmente.
Que terminó con la misma conclusión que tú, parece que hay algo mal con el Generador de Interfaz de la aplicación de la UIScreenEdgePanGestureRecognizer.
He probado en Xcode 7.0 Beta 4 (7A165t) y aún así es un error. Agregar el Borde de la Pantalla Pan Gesto de Reconocimiento a través de la Interface Builder, no llama a los que se hace referencia IBAction, sin embargo, agregar mediante programación como esta funciona bien:
Sugerencia: no te olvides de añadir el UIGestureRecognizerDelegate protocolo para su clase. De lo contrario, obtendrá un error en
edgeGestureRecognizer.delegate = self
Puede ser considerado como un error, pero en realidad, aquí es algo útil:
«Después de la creación de un borde de la pantalla pan gesto de reconocimiento, asignar un valor adecuado a los bordes de la propiedad antes de colocar el gesto de reconocimiento a su vista.»
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIScreenEdgePanGestureRecognizer_class/index.html
Este requisito sólo se aplica a UIScreenEdgePanGestureRecognizer, así que yo creo que por eso Xcode hacen mal, debe de ser implementado como la secuencia normal, alloc->init->attach->el valor fijado. Va a trabajar a todos los demás GestureRecongnizer pero no UIScreenEdgePanGestureRecognizer.
Xcode no siempre es un buen vecino. Lo siento.
Para asegurarse de que varias gesto reconocedores pueden trabajar juntos los que tienen que implementar el método
shouldRecognizeSimultaneouslyWithGestureRecognizer
y devolver true:Lo siento por el código Swift, pero usted debe tener la idea.
Este método debe aplicarse incluso si usted está usando un solo gesto de reconocimiento debido a que la vista puede tener su propio (sistema) reconocedores, tales como
MKMapView
.gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
método de delegado y hacer elViewController
laUIScreenEdgePanGestureRecognizer
‘s delegado no hace ninguna diferencia. Todavía no hay borde de la cacerola detectado. RegularUIPanGestureRecognizer
funciona bien. Creo que podría elevar un informe de error.Parece que hay un error en Xcode 6.4 del interface builder y Swift. También, Thomas LIU, fue la respuesta de corregir también: parece ser necesario para establecer la .el borde de la propiedad en el código, en lugar de con el Interface Builder.
Aunque hay edge casillas de verificación en IB, parecen ser ignorados.
He resuelto de esta manera:
Ctrl y arrastre desde el gesto de reconocimiento a la viewController clase para crear un IBOutlet:
luego, en viewDidLoad:
y, por último, pulse ctrl y arrastre desde el reconocedor para crear un IBAction
Enfrentan el mismo problema de tiempo. Su xcode error, es mejor agregar mediante programación.