UIResponder против UIGestureRecognizer для ответа на сенсорное событие

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

Насколько я могу судить, в iOS есть два общепринятых метода реагирования на прикосновения: распознавание жестов и распознавание касаний.

Когда целесообразно использовать один или другой?

Специально для чего я строю *:

Я пишу контроллер для представления, которое должно размещать элементы (UIImageViews) на экране, где пользователь касается, а также перемещать их по мере перетаскивания пользователем. Контроллер взаимодействует с отдельной моделью, поэтому мне нужно детально контролировать, когда отправлять сообщения модели во время сенсорных событий.

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

Сначала я подумал, что мог бы использовать распознаватель панорамирования, чтобы выполнить работу, но когда я углубился в это, я не смог найти способ настроить вызовы пользовательских функций при касании, перетаскивании и отрыве. события (если есть способ, было бы неплохо узнать). Я нашел методы UIResponder, но они все еще предназначены для использования, или лучше всего работать только с распознавателями жестов в iOS6?

* код не включен, потому что объем этого вопроса довольно велик, и я не хочу отвлекать людей ненужными подробностями.

1 ответ

Я пришел сюда, потому что я исследовал эффективность UIGestureRecognizer по сравнению с UIResponderметоды сенсорных событий, так как я использую их для приложений с низкой задержкой. Для общего использования я могу подтвердить, что вы можете переопределить touchesBegan/Moved/Ended/Cancelled и т. д. методы в вашем UIView подкласс или в UIGestureRecognizer подкласс (который добавляется к UIView) или даже в UIViewController подкласс (это часть цепочки респондента, как UIView).

Вы также можете создать подкласс UIGestureRecognizer как Pan GR и переопределить эти методы, чтобы использовать дополнительные функциональные возможности, используя то, что они уже обнаруживают. Обязательно позвони super (во всех случаях выше на самом деле), и вы, вероятно, захотите проверить или обновить state имущество.

Что касается моего вопроса о том, что является более эффективным, я пока не знаю, но я бы предположил, что он почти эквивалентен.

Другие вопросы по тегам