UIResponder против UIGestureRecognizer для ответа на сенсорное событие
Я исследовал различные методы программирования ответов на события касания для приложения, которое я создаю, и меня немного смущает то, что я читаю.
Насколько я могу судить, в iOS есть два общепринятых метода реагирования на прикосновения: распознавание жестов и распознавание касаний.
Когда целесообразно использовать один или другой?
Специально для чего я строю *:
Я пишу контроллер для представления, которое должно размещать элементы (UIImageViews) на экране, где пользователь касается, а также перемещать их по мере перетаскивания пользователем. Контроллер взаимодействует с отдельной моделью, поэтому мне нужно детально контролировать, когда отправлять сообщения модели во время сенсорных событий.
Модель должна знать, где пользователь впервые касается экрана (мультитач не включен) и где пользователь снимает экран. Мне нужно запросить модель при первом прикосновении пользователя, чтобы выяснить, хочет ли пользователь отредактировать местоположение просмотра изображения или создать новое, и мне нужно сообщить модели о том, где пользователь снимает экран, так что модель может быть обновлена. Также во время события перетаскивания мне нужно отправить постоянные запросы к модели, чтобы определить, действительно ли местоположение, в котором пользователь находится в данный момент, действительно.
Сначала я подумал, что мог бы использовать распознаватель панорамирования, чтобы выполнить работу, но когда я углубился в это, я не смог найти способ настроить вызовы пользовательских функций при касании, перетаскивании и отрыве. события (если есть способ, было бы неплохо узнать). Я нашел методы UIResponder, но они все еще предназначены для использования, или лучше всего работать только с распознавателями жестов в iOS6?
* код не включен, потому что объем этого вопроса довольно велик, и я не хочу отвлекать людей ненужными подробностями.
1 ответ
Я пришел сюда, потому что я исследовал эффективность UIGestureRecognizer
по сравнению с UIResponder
методы сенсорных событий, так как я использую их для приложений с низкой задержкой. Для общего использования я могу подтвердить, что вы можете переопределить touchesBegan/Moved/Ended/Cancelled
и т. д. методы в вашем UIView
подкласс или в UIGestureRecognizer
подкласс (который добавляется к UIView
) или даже в UIViewController
подкласс (это часть цепочки респондента, как UIView
).
Вы также можете создать подкласс UIGestureRecognizer
как Pan GR и переопределить эти методы, чтобы использовать дополнительные функциональные возможности, используя то, что они уже обнаруживают. Обязательно позвони super
(во всех случаях выше на самом деле), и вы, вероятно, захотите проверить или обновить state
имущество.
Что касается моего вопроса о том, что является более эффективным, я пока не знаю, но я бы предположил, что он почти эквивалентен.