84
Пользовательский ввод
onTouchEvent(MotionEvent)
: вызывается, когда
появляется событие жеста;
onFocusChange
d(boolean,
int,
Rect)
: вызывается, когда представление полу
-
чает или теряет фокус ввода.
Узнать больше об обнаружении жестов можно в замечательном руководстве
по Android:
https://orei
l.ly/tFb5K
.
iOS
В 2007 году Apple представила новый iPhone и вместе с ним мультисенсорную
технологию Multi-Touch. Несмотря на повсеместное распространение этой
технологии в наши дни, в ту пору возможность выполнять жесты нескольки
-
ми пальцами произвела революцию и изменила пользовательский интерфейс.
В настоящее время сенсорные методы ввода
являются основой взаимодей
-
ствия со смартфоном, но, безусловно, не единственными. В этой главе рассмат-
риваются два наиболее распространенных метода ввода: с помощью касаний
и клавиатуры. Приступим.
Получение события касания и реакция на него
Поддержка сенсорных событий в iOS является, пожалуй, лучшей в отрасли. Она
немного изменилась с течением времени, но в основном осталась той же, ко
-
торая появилась в iOS 4. На сегодняшний день она предлагает самый простой
способ перехвата сенсорных событий. Вот, например, как можно организовать
получение события касания в представлении с изображением в контроллере
представления:
class SomeViewController: UIViewController {
var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
imageView = UIImageView(image: ...)
let gestureRecognizer =
UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
gestureRecognizer.numberOfTapsRequired = 1
imageView.addGestureRecognizer(gestureRecognizer)
}
@objc func handleTap(_ gestureRecognizer: UIGestureRecognizer) {
print("Image tapped!")
}
}
Здесь
объявляется класс
SomeViewController
, наследующий
UIViewController
.
Большая часть операций в этом классе выполняется внутри
viewDidLoad()
. Это
метод жизненного цикла представлений в iOS, и здесь обычно выполняют на
-
стройку представления в контроллере. Загляните в главу 2, где более подробно
рассказывается о представлениях.
Внутри этого метода настраивается представление с
изображением
ima
geView
. В следующей строке мы объявляем распознаватель жестов типа
UITap
iOS
85
GestureRecognizer
, которому передаются ссылка
self
на этот экземпляр и метод
handleTap(_:)
для вызова этим распознавателем жестов.
После записи значения
1
в
свойство
numberOfTapsRequired
распознавателя,
указывающего, что должно распознаваться одно касание, мы добавляем рас
-
познаватель жестов в созданный перед этим экземпляр представления с изо
-
бражением. Это необходимо для включения распознавателя в работу. В нашем
примере это означает, что всякий раз, когда пользователь коснется представ
-
ления с изображением, это представление просмотрит
список своих распо-
знавателей и определит, какой из них следует вызвать для обработки события.
Затем выбранный распознаватель жестов сам вызовет метод
handleTap(_:)
,
который мы сами указали.
Обратите внимание, что
handleTap(_:)
объявлен как метод
@objc
. Это связано с тем,
что
UIGestureR
ecognizer
и его подклассы требуют передачи
#selector(...)
в ка
чест ве
действия, выполняемого при активации распознавателя жестов.
В нашем примере использован типичный шаблон, который фактически сво
-
дится к двум строкам:
let gestureRecognizer = UITapGestureRecognizer(target: self,
action: #selector(handleTap(_:)))
imageView.addGestureRecognizer(gestureRecognizer)
Мы создали экземпляр распознавателя жестов и подключили его к пред
-
ставлению.
Распознаватели обладают очень широкими возможностями. Мы поговорим
о них ниже, в этой же главе, а пока рассмотрим другой основной источник вво
-
да в iOS – клавиатуру.
Do'stlaringiz bilan baham: