Жесты на мобильных устройствах, выполняемые стилусом или пальцем, могут быть эффективнее и удобнее стандартных взаимодействий с кнопками и меню в зависимости от контекста и задачи. Однако, необходимость запоминания жестов и связанных с ними команд вызывают некоторые трудности. Кроме того, ограниченность пространства на мобильных устройствах и наличие кликабельных и подвижных элементов в UI усложняют распознавание жестов. Для решения данных проблем, предоставляю вашему вниманию библиотеку iOSGesturizer.
В кратце, данная библиотека позволяет обучаться и использовать разные виды жестов, выполненные одним пальцем, по всей площади дисплея и в любых iOS приложениях на девайсах с поддержкой 3D-touch. Теперь подробнее разберем на примере.
Возьмем готовый простой проект FoodTracker от Apple, который используется в их обучающих материалах. После того как библиотека была добавлена в этот проект через CocoaPods или обычным переносом файлов, откроем два файла из проекта.
В файле AppDelegate.swift инициализируем переменную
Теперь откроем файл MealTableViewController.swift и добавим
Через gestureHandler мы определили методы при распознавании жестов. В данном случае выводится имя жеста во всплывающем окне (cut, copy, или paste). Запустим проект и получаем следующее:
Как вы можете заметить, приложение распознает три вида жеста. Для отображения возможных жестов (пример слева), после сильного нажатия нужно подождать одну секунду и выполнить нужное вам движение пальцем. А после изучения, можно выполнять жесты и без ожидания (пример справа).
С точки зрения архитектуры все это дело выглядит вот так:
GesturizerWindow в первую очередь обрабатывает все касания экрана и определяет передать event на GesturizerView или на View-шки ниже. Стоит отметить, что GesturizerView нужен только для рисования жестов в Training Mode, в то время как обработка силы нажатия и распознование жестов происходит в GesturizerWindow. И к счастью для нас, GesturizerWindow не создает задержек в приложении, поскольку для распознования жестов используется быстрый и простой алгоритм 1$-Recognizer, который не требует обучения и тренировочных данных.
Если вам идея показалось интересной, жду pull-запросы.
P.S.: В дальнейшем планирую добавить функционалы для кастомизации жестов и параметров в целом.
В кратце, данная библиотека позволяет обучаться и использовать разные виды жестов, выполненные одним пальцем, по всей площади дисплея и в любых iOS приложениях на девайсах с поддержкой 3D-touch. Теперь подробнее разберем на примере.
Возьмем готовый простой проект FoodTracker от Apple, который используется в их обучающих материалах. После того как библиотека была добавлена в этот проект через CocoaPods или обычным переносом файлов, откроем два файла из проекта.
В файле AppDelegate.swift инициализируем переменную
window: UIWindow
как экземпляр класса GesturizerWindow:var window: UIWindow? = GesturizerWindow()
Теперь откроем файл MealTableViewController.swift и добавим
viewDidAppear(_ animated: Bool)
:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let window = UIApplication.shared.keyWindow! as! GesturizerWindow
let view = GesturizerView()
view.gestureHandler = {index in
let alert = UIAlertView()
alert.message = view.names[index]
alert.addButton(withTitle: "OK")
alert.show()
}
window.setGestureView(view: view)
}
Через gestureHandler мы определили методы при распознавании жестов. В данном случае выводится имя жеста во всплывающем окне (cut, copy, или paste). Запустим проект и получаем следующее:
Как вы можете заметить, приложение распознает три вида жеста. Для отображения возможных жестов (пример слева), после сильного нажатия нужно подождать одну секунду и выполнить нужное вам движение пальцем. А после изучения, можно выполнять жесты и без ожидания (пример справа).
С точки зрения архитектуры все это дело выглядит вот так:
GesturizerWindow в первую очередь обрабатывает все касания экрана и определяет передать event на GesturizerView или на View-шки ниже. Стоит отметить, что GesturizerView нужен только для рисования жестов в Training Mode, в то время как обработка силы нажатия и распознование жестов происходит в GesturizerWindow. И к счастью для нас, GesturizerWindow не создает задержек в приложении, поскольку для распознования жестов используется быстрый и простой алгоритм 1$-Recognizer, который не требует обучения и тренировочных данных.
Если вам идея показалось интересной, жду pull-запросы.
P.S.: В дальнейшем планирую добавить функционалы для кастомизации жестов и параметров в целом.