Изучение данного блока предполагает предварительное знание синтаксиса языка Swift. Для успешного освоения этого материала, необходимо иметь базовое понимание синтаксиса языка Swift. Это включает в себя знание основных структур данных, операторов, циклов, функций, абстракций и других ключевых элементов языка. Без этих фундаментальных знаний будет сложно понять более сложные концепции и примеры, которые будут рассматриваться в данном блоке.
Жесты — механизм, позволяющий разработчикам реагировать на пользовательские взаимодействия с интерфейсом. Жесты включают такие действия, как нажатия, долгие нажатия, перетаскивания, масштабирование, вращение и многое другое. SwiftUI предоставляет ряд встроенных жестов, которые можно использовать для создания интуитивно понятных интерфейсов, а также возможность создания собственных жестов.
SwiftUI обрабатывает события касания и другие сенсорные данные, чтобы обнаруживать и обрабатывать жесты. Эти данные включают позицию пальцев, длительность касания, угол вращения и другие параметры, которые затем преобразуются в действия, определенные разработчиком. Под капотом SwiftUI использует сочетание UIView (для iOS) или NSView (для macOS) и различных API для работы с событиями ввода. Жесты являются оберткой над этими API и предоставляют более удобный способ работы с пользователем.
Это базовый жест, который распознает одно или несколько нажатий на экран. Он полезен для выполнения простых действий, таких как открытие окна, изменение состояния кнопки или переключение между режимами.
Реализация: TapGesture обрабатывает событие касания (touch event) и проверяет, соответствует ли оно заданному количеству нажатий. Если количество нажатий совпадает, жест срабатывает.
Примеры:
struct SimpleTapGestureExample: View {
@State private var isTapped = false
var body: some View {
Text(isTapped ? "Tapped!" : "Tap me")
.padding()
.background(isTapped ? Color.green : Color.blue)
.cornerRadius(10)
.onTapGesture {
isTapped.toggle()
}
}
}

• Чтобы поменялось значение tapCount, пользователю необходимо произвести двойной тап на кнопку
struct MultipleTapGestureExample: View {
@State private var tapCount = 0
var body: some View {
VStack {
Text("Double-tap to count")
Text("Tapped \\(tapCount) times")
.padding()
.background(Color.orange)
.cornerRadius(10)
.onTapGesture(count: 2) {
tapCount += 1
}
}
}
}

struct CoordinateTapGestureExample: View {
@State private var location = CGPoint.zero
var body: some View {
VStack {
Text("Tap location: \\(Int(location.x)), \\(Int(location.y))")
.padding()
Rectangle()
.fill(Color.purple)
.frame(width: 200, height: 200)
.onTapGesture { loc in
location = loc
}
}
}
}