ios - tapgesture recognizer swift
Evite que UIPanGestureRecognizer de UIScrollView bloquee UIScreenEdgePanGestureRecognizer (2)
Desafortunadamente, la creación de este comportamiento puede ser un verdadero P *** i * t ** A **.
Afortunadamente, es posible crear este comportamiento utilizando el Delegado de UIGestureRecognizer, incluso si no puede acceder directamente a GestureRecognizer.
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
-(BOOL)gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
-(BOOL)gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:
El segundo parámetro (''otherGestureRecognizer'') pasado en los métodos de delegado contiene el PanGestureRecognizer de UIScrollView (o Apple-subclases privadas) cuando su gestureRecognizer ''colisiona'' con el de scrollView.
Así que simplemente configure su delegado UIScreenEdgePanGestureRecognizer para responder a los métodos de delegado.
El nombramiento de estos dos métodos es muy inferior al óptimo y, sinceramente, no sé realmente cuáles son los valores de devolución correctos para su caso.
Acabo de tener este problema ayer y lo resolví mediante una prueba y error brutal.
En mi caso, devolver NO de los métodos shouldRequireToFail y shouldBeRequiredToFail y YES del método simultáneo resolvió mi problema.
Note: Returning NO from both methods changed the behavior compared to not
even implementing the methods at all. Even though the documentation says
the default return value is NO.
Sin embargo, se puede lograr CUALQUIER comportamiento GestureRecognizer utilizando los métodos de delegado. Pero como dije antes, nombrar los métodos es muy confuso. + hay tanto como NINGUNA documentación útil para estos métodos.
Tengo un UIScrollView
que llena la pantalla en una página de mi aplicación, pero quiero permitir al usuario desplazarse desde el borde de la pantalla para revelar una vista detrás de ella. El problema es que UIScrollView roba los toques de mi UIScreenEdgePanGestureRecognizer
en el borde de la pantalla. Desafortunadamente, no puedo acceder al UIScreenEdgePanGestureRecognizer
desde el controlador de vista que tiene el UIScrollView
(y viceversa), por lo que no puedo usar el método requireGestureRecognizerToFail:
porque no puedo especificar qué gestor de reconocimiento se debe permitir que falle. El controlador de visualización con la vista de desplazamiento es un controlador de vista hijo de un controlador de vista de contenedor que tiene el reconocedor de movimiento de panorama de borde de pantalla unido a una de las vistas del controlador de vista de contenedor.
Tampoco puedo usar el método delegado
-(BOOL)gestureRecognizer:shouldRequireFailureOfGestureRecognizer:
porque el UIScrollView
no me permitirá configurar mi controlador de vista como el delegado del UIPanGestureRecognizer
la vista de UIPanGestureRecognizer
.
¿Cómo puedo evitar que la vista de desplazamiento robe los toques del borde de mi propio reconocedor de gestos?
Esto se puede hacer sin tener que configurar el delegado del gesto pan en la pantalla en su controlador de vista.
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:screenPanGesture];