¿Qué es un UIGobblerGestureRecognizer?

Solo tengo un UITableView regular y ejecuté este código:

UITableView *tableView = [[UITableView alloc] init]; for(UIGestureRecognizer *gesture in tableView.gestureRecognizers) { NSString *className = NSStringFromClass([gesture class]); NSLog(@"ClassName:%@", className); } 

Una de las líneas de salida es: ClassName:UIGobblerGestureRecognizer

Sorprendentemente, Google no tiene nada en esto. Alguien tiene alguna idea de lo que es?

Lo más probable es que sea una class interna que Apple usa. Encontré subclasss personalizadas de UIGestureRecognizers que Apple creó para un uso específico. Estoy seguro de que han necesitado crear reconocedores de gestos personalizados por diversos motivos, tal como lo he hecho y no todas las classs están expuestas para que las utilicemos.

Echa un vistazo a http://oleb.net/blog/2013/02/new-undocumented-apis-ios-6-1/

BJ Homer cree que UIGobblerGestureRecognizer se usa para evitar el reconocimiento mientras las animaciones están en progreso. De lo contrario, está inactivo. En una interesante conversación en Twitter, Filippo Bigarella y Conrad Kramer descubrieron que UIGobblerGestureRecognizer puede "engullir" toques para evitar que otros reconocedores de gestos los reciban en ciertas situaciones. Qué situaciones son esas, no lo sé.

Estoy muy seguro de que se utiliza para evitar la interacción normal mientras una celda en particular muestra un button de confirmación de eliminación y reconoce que cualquier toque hacia abajo activa esa celda para volver a un estado sin edición.

Tiene este método y supongo que excludedView es la celda que muestra un button de confirmación de eliminación, ya que normalmente puede interactuar con celdas en este estado.

- (id)initWithTarget:(id)arg1 action:(SEL)arg2 excludedView:(id)arg3;

https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIGobblerGestureRecognizer.h

En resumen, de lo que he leído y de lo que han demostrado mis experimentos, el "gobbler" parece engullir los toques y toques en una vista de tabla (en realidad, celdas de la tabla) cuando una transición de estado (iniciada por el toque o deslizado del usuario) está en progreso, de modo que la transición de estado se puede completar antes de que el usuario pueda tocar la tabla nuevamente. Apple puede usarlo en otros casos, pero está en la vista de la tabla que he observado a los gobblers.

Ahora la historia larga: suponga que su vista de tabla implementa un "cajón" en la celda de la tabla, como la aplicación de correo o la aplicación de posts de Apple. Cuando abra el cajón con un golpe hacia atrás y realice una acción en cualquiera de los botones del cajón, todo estará bien. Pero si solo cierra el sorteo con un golpe posterior, es probable que descubra que su siguiente golpe hacia atrás en una celda random no funciona. Pero si sigues haciendo golpes traseros, el siguiente golpe usualmente volverá a funcionar para mostrar el cajón. En pocas palabras, si simplemente abre y cierra el cajón en celdas aleatorias con deslizar, encontrará que a veces el cajón no se abre.

Veo este comportamiento en mi table y pensé que hice algo mal. Probé muchas cosas y finalmente implementé mi propia subclass de UITableView, que también es compatible con UIGestureRecognizerDelegate. En mi subclass implementé la function shouldBeRequinetworkingToFailByGestureRecognizer del delegado, solo para imprimir los pares gestureRecognizer y otherGestureRecognizer. Entonces descubrí que cuando se reconoce el golpe hacia atrás, el gobbler NO está presente en los pares. Pero cuando el golpe hacia atrás no funciona, el gobbler definitivamente está presente.

La opinión general en la web es que el gobbler se usa para evitar que el usuario provoque otra transición de estado en la table mientras una transición ya está en progreso. Eso está bien si el usuario realiza alguna acción (tocando un button en el cajón). Pero cuando el usuario simplemente cierra el cajón, el gobbler debe ser cancelado. O el gobbler se debe agregar SÓLO cuando el usuario realiza una acción. Después de mi realización, pasé a probar mi teoría sobre las aplicaciones de Apple. Ya sabía que la aplicación Mail se comporta perfectamente respondiendo a cada golpe. Pero la aplicación de posts se comporta de manera intermitente en repetidos pasos de apertura de cajones, como mi aplicación. Así que supongo que los desarrolladores de Mail son más cuidadosos y utilizan el conocimiento interno para hacerlo bien. Mi observación se hace en iOS 8.4 en iPhone 6 y iPad 2. Y creo que el mismo problema gobbler se remonta al less desde la primera versión de iOS 8 porque sé que mi aplicación tuvo el problema desde el primer día (meses atrás), pero acabo de recibir alnetworkingedor para ver el problema.

Definitivamente debería ser parte de API privada.

sugeriré que se quede fuera de él