Обработка сложных жестов
Распознаватели жестов отлично справляются с простыми жестами, выполня
-
емыми одним пальцем. Но их также с успехом можно использовать для реа
-
лизации сложных цепочек взаимодействий. Рассмотрим следующий пример:
let doubleTapRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
doubleTapRecognizer.numberOfTapsRequired = 2
Этот код напоминает наш предыдущий пример распознавателя одного каса
-
ния. Однако, просто изменив значение одного свойства, мы смогли превратить
его в распознаватель касания двумя пальцами.
88
Пользовательский ввод
В UIKit есть также другие встроенные распознаватели жестов. Если вам по
-
надобится распознать жест панорамирования тремя пальцами, его можно соз
-
дать, как показано ниже:
let panGestureRecognizer = UIPanGestureRecognizer(target: self,
action: #selector(handlePan(_:)))
panGestureRecognizer.minimumNumberOfTouches = 3
Или, если вы решите определить физически сложно осуществимый жест, вот
вам пример пятипальцевого жеста тройного касания:
let fiveFingerTapRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
fiveFingerTapRecognizer.numberOfTapsRequired = 3
fiveFingerTapRecognizer.numberOfTouchesRequired = 5
Вы едва ли будете часто встречать нечто подобное в приложениях. Однако
все сенсорные интерфейсы имеют общую проблему: в одном представлении
часто требуется обрабатывать несколько сенсорных событий. Но как обрабо
-
тать жесты одиночного и двойного касания без риска случайно запустить сна
-
чала обработчик одиночного касания? Вот как может выглядеть такая реали
-
зация:
// Создать распознаватель двойного касания
let doubleTapRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
doubleTapRecognizer.numberOfTapsRequired = 2
// Создать распознаватель одного касания
let singleTapRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
singleTapRecognizer.numberOfTapsRequired = 1
singleTapRecognizer.require(toFail: doubleTapRecognizer)
Здесь сначала создается распознаватель
doubleTapRecognizer
жестов двойного
касания. В свойство
numberOfTapRequired
распознавателя записывается значе
-
ние
2
. Затем создается распознаватель
singleTapRecognizer
жестов одиночного
касания. Количество касаний устанавливается равным
1
, а затем вызывается
отдельный метод
require(toFail:)
, которому передается распознаватель жестов
двойного касания, созданный ранее.
Метод
require(toFail:)
имеется во всех распознавателях жестов и позволяет
им запускаться только в случае отказа другого распознавателя. Такое связыва
-
ние распознавателей позволяет распознавателю одиночного касания дождать
-
ся, когда распознаватель двойного касания потерпит неудачу, и только потом
вызвать свой обработчик. Без подобной связи, когда пользователь выполнит
жест двойного касания, после первого касания сработает распознаватель оди
-
ночного касания, а после второго – распознаватель двойного касания.
Это позволяет увидеть, как можно связать несколько составных жестов
и придать им определенные приоритеты выполнения. Количество комбинаций
распознавателей жестов, которые можно создать, фактически бесконечно; од
-
нако их перечисление выходит за рамки этой книги, но если вам интересно, об
-
ращайтесь к описанию
U
IGestureRecognizer
в документации для разработчиков.
Что мы узнали
Do'stlaringiz bilan baham: |