Нахавандипур Вандад
Шрифт:
Распознаватели жестов можно добавлять к любому экземпляру класса UIView с помощью метода addGestureRecognizer:, относящегося к виду. При необходимости распознаватели можно удалять, пользуясь методом removeGestureRecognizer:.
У класса UIGestureRecognizer есть свойство под названием state. Свойство state представляет различные состояния распознавателя жестов, которые он принимает в ходе распознавания. Последовательности претерпеваемых состояний различаются у дискретных и непрерывных распознавателей жестов.
Дискретный распознаватель жестов может проходить через три следующих состояния:
• UIGestureRecognizerStatePossible;
• UIGestureRecognizerStateRecognized;
• UIGestureRecognizerStateFailed.
В зависимости от ситуации дискретный распознаватель жестов может сообщать своей цели о состоянии UIGestureRecognizerStateRecognized либо о состоянии UIGestureRecognizerStateFailed, если в процессе распознавания возникнет ошибка.
Непрерывные распознаватели жестов претерпевают иную серию состояний, которые посылают своим целям:
• UIGestureRecognizerStatePossible;
• UIGestureRecognizerStateBegan;
• UIGestureRecognizerStateChanged;
• UIGestureRecognizerStateEnded;
• UIGestureRecognizerStateFailed.
Состояние распознавателя жестов меняется на UIGestureRecognizerStatePossible в том случае, когда распознаватель собирает в виде информацию о событиях касаний и в любой момент может обнаружить интересующий его жест. Кроме вышеупомянутых состояний непрерывного распознавателя жестов может возникать и состояние UIGestureRecognizerStateCancelled, если жест по какой-то причине прерывается. Например, жест панорамирования может быть прерван входящим телефонным вызовом. В данном случае распознаватель жестов перейдет в состояние UIGestureRecognizerStateCancelled и перестанет отправлять объекту-получателю какие-либо сообщения, если пользователь не повторит всю жестовую последовательность.
Опять же, если непрерывный распознаватель жестов столкнется с ситуацией, которую не удается разрешить с помощью имеющихся у системы возможностей, возникнет состояние UIGestureRecognizerStateFailed, а не UIGestureRecognizerStateEnded.
10.1. Обнаружение жестов смахивания
Постановка задачи
Необходимо идентифицировать скользящие жесты смахивания, которые пользователь осуществляет на виде, например, когда убирает картинку с окна.
Решение
Инстанцируйте объект типа UISwipeGestureRecognizer и добавьте его к экземпляру UIView:
Распознаватель жестов может быть создан как автономный объект, но в данном случае, поскольку мы используем распознаватель только с одним видом, мы запрограммировали его как свойство контроллера вида, который будет принимать жест (self.swipeGestureRecognizer). В подразделе «Обсуждение» данного раздела показано применение в этом коде метода handleSwipes:, выступающего в качестве цели для распознавателя жестов смахивания.
Обсуждение
Жест смахивания (скольжения) — одно из наиболее простых движений, регистрируемых встроенными распознавателями жестов, входящими в состав iOS SDK. Это простое движение одного или нескольких пальцев по экрану в том или ином направлении. Класс UISwipeGestureRecognizer, как и любые другие распознаватели жестов, наследует от класса UIGestureRecognizer и добавляет к нему различные функции. В частности, это свойства, позволяющие указывать направление, в котором должны выполняться жесты смахивания, чтобы система их обнаружила, а также определять, сколько пальцев пользователь должен держать на экране, чтобы можно было совершить жест смахивания. Не забывайте, что жесты смахивания являются дискретными.