Что такое UIGobblerGestureRecognizer?

У меня только обычный UITableView, и я запустил этот код:

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

Одна из выходных строк: ClassName:UIGobblerGestureRecognizer

Удивительно, что Google ничего не знает об этом. Кто-нибудь знает, что это такое?

Ответ 1

Скорее всего, это внутренний класс, который использует Apple. Я столкнулся с пользовательскими подклассами UIGestureRecognizers, которые Apple создала для определенного использования. Я уверен, что им нужно создавать пользовательские распознаватели жестов по разным причинам, так же, как и у меня, и не все из этих классов доступны для нас.

Ответ 2

Отъезд http://oleb.net/blog/2013/02/new-undocumented-apis-ios-6-1/

BJ Homer считает, что UIGobblerGestureRecognizer используется, чтобы избежать распознавание во время анимации. В противном случае его неактивный. В интересном разговоре в Twitter, Филиппо Бигарелла и Конрад Крамер обнаружил, что UIGobblerGestureRecognizer может "сожрать", чтобы предотвратить другие распознаватели жестов получая их в определенных ситуациях. Какие ситуации такие, я не знаю.

Ответ 3

Я очень уверен, что он используется для предотвращения нормального взаимодействия, в то время как конкретная ячейка показывает кнопку подтверждения удаления и распознает любое нажатие вниз, инициируя эту ячейку, чтобы вернуться в состояние без редактирования.

Он имеет этот метод, и я предполагаю, что excludedView - это ячейка, которая показывает кнопку подтверждения удаления, так как вы обычно можете взаимодействовать с ячейками в этом состоянии.

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

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

Ответ 4

Вкратце, из того, что я прочитал и что показали мои эксперименты, "gobbler", кажется, сожрает удары и касается табличного представления (фактически ячеек таблицы), когда переход состояния (инициированный пользователем touch или салфетки), так что переход состояния может быть завершен до того, как пользователь снова коснется таблицы. Apple может использовать его в других случаях, но на табличном представлении я наблюдал за бокалами.

Теперь длинная история. Предположим, ваш вид таблицы реализует "ящик" в ячейке таблицы, например приложение Apple mail или приложение для сообщений. Когда вы открываете ящик спиной и предпринимаете действия на любой из кнопок в ящике, все хорошо. Но если вы просто закроете ничью с четвертым салфеткой, вы, скорее всего, обнаружите, что ваш следующий обратный ход на случайной ячейке не работает. Но если вы продолжаете делать задние лапки, следующий салфетка обычно снова будет работать, чтобы показать ящик. Проще говоря, если вы просто открываете и закрываете ящик на случайных ячейках, используя swipes, вы обнаружите, что ящик не открывается.

Я вижу это поведение на своем столе и думаю, что я сделал что-то неправильно. Я пробовал много вещей и в конечном итоге реализовал свой собственный подкласс UITableView, который также поддерживает UIGestureRecognizerDelegate. В моем подклассе я реализовал функцию делегата shouldBeRequiredToFailByGestureRecognizer, чтобы просто распечатать пары gestureRecognizer и otherGestureRecognizer. Затем я обнаружил, что когда распознается обратный салфетка, сапожник НЕ присутствует в парах. Но когда спина не работает, сапожник определенно присутствует.

Общее мнение в Интернете состоит в том, что gobbler используется, чтобы пользователь не вызывал другой переход состояния в таблицу, пока один переход уже выполняется. Это нормально, если пользователь действительно предпринимает некоторые действия (нажав кнопку в ящике). Но когда пользователь просто закрывает ящик, сапожник должен быть отменен. Или же gobbler должен быть добавлен ТОЛЬКО, когда пользователь предпримет действие. После моего осознания я продолжил использовать свою теорию в приложениях Apple. Я уже знал, что приложение Mail отлично реагирует на каждое проворство. Но приложение Message ведет себя периодически к повторным открывающим ящикам, как и к моему приложению. Поэтому я думаю, что разработчики Mail более осторожны и используют внутренние знания, чтобы понять это правильно. Мое наблюдение сделано на iOS 8.4 на iPhone 6 и iPad 2. И я считаю, что тот же вопрос о gobbler восходит по крайней мере от первого выпуска iOS 8, потому что я знаю, что у моего приложения была проблема с первого дня (несколько месяцев назад), но я только что получил вокруг, чтобы изучить проблему.

Ответ 5

он обязательно должен быть частью частного API.

Я предлагаю не вмешиваться в него