SwiftUI imo-ishoralar
SwiftUI imo-ishoralar (gestures)
Bosish, sudrash va boshqa o‘zaro ta’sirlarni .gesture va o‘rnatilgan imo-ishora aniqlagichlari (gesture recognizers) yordamida qayta ishlang.
Bosish va uzoq bosish
Bosish va uzoq bosishlarni .onTapGesture va .onLongPressGesture bilan qayta ishlang.
Sintaksis:
.onTapGesture { ... }.onLongPressGesture(minimumDuration:perform:)
Misol
import SwiftUI
struct TapLongPressDemo: View {
@State private var on = false
@State private var pressed = false
var body: some View {
Circle()
.fill(on ? .green : .gray)
.frame(width: 80, height: 80)
.scaleEffect(pressed ? 0.9 : 1)
.onTapGesture { on.toggle() }
.onLongPressGesture(minimumDuration: 0.5) { pressed.toggle() }
}
}
import SwiftUI
struct ContentView: View {
var body: some View { TapLongPressDemo() }
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol bosilganda rangni almashtiradi va uzoq bosilganda doirani qisqa muddatga kattalashtiradi.
DragGesture
Offset’ni yangilash uchun DragGesture biriktirib, barmoq harakatini kuzating.
Sintaksis: .gesture(DragGesture().onChanged { value in ... }.onEnded { ... })
Misol
import SwiftUI
struct DragDemo: View {
@State private var offset: CGSize = .zero
var body: some View {
Text("Drag me")
.padding(12)
.background(.blue.opacity(0.1))
.cornerRadius(8)
.offset(offset)
.gesture(
DragGesture()
.onChanged { value in offset = value.translation }
.onEnded { _ in withAnimation(.spring()) { offset = .zero } }
)
}
}
import SwiftUI
struct ContentView: View {
var body: some View { DragDemo() }
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol sudrash paytida barmoqqa ergashadi va qo‘yib yuborilganda prujina kabi boshlang‘ich joyiga qaytadi.
Imo-ishoralarni birlashtirish
Bir nechta imo-ishorani muvofiqlashtirish uchun .simultaneousGesture yoki .highPriorityGesture dan foydalaning.
Sintaksis:
.simultaneousGesture(TapGesture()).highPriorityGesture(DragGesture())
Misol
import SwiftUI
struct CombineGesturesDemo: View {
@State private var tapped = 0
@State private var dragged = false
var body: some View {
Rectangle()
.fill(dragged ? .orange : .purple)
.frame(height: 120)
.overlay(Text("taps: \(tapped)"))
.simultaneousGesture(TapGesture().onEnded { tapped += 1 })
.highPriorityGesture(DragGesture().onChanged { _ in dragged = true }.onEnded { _ in dragged = false })
}
}
import SwiftUI
struct ContentView: View {
var body: some View { CombineGesturesDemo() }
}
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup { ContentView() }
}
}
Ushbu misol bosishlarni sanaydi va shu bilan birga sudrashga ham javob beradi — bu imo-ishoralar kompozitsiyasini namoyish etadi.
Maslahat: O‘zaro ta’sirlarni muvofiqlashtirish uchun imo-ishoralarni .simultaneousGesture yoki .highPriorityGesture bilan birlashtiring.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
