LongPressGesture (LongPressGesture)
اینجا درباره ژست نگه داشتن (LongPressGesture) حرف می زنیم. ژست یعنی حرکت لمسی. با نگه داشتن، لمس باید کمی طولانی تر باشد تا رویداد فعال شود.
LongPressGesture چیست؟
LongPressGesture یعنی لمس را کمی نگه داری. سپس کد اجرا می شود. با .onLongPressGesture(minimumDuration:) زمان لازم را مشخص می کنی.
تغییر متن با نگه داشتن
نیم ثانیه نگه دار. متن بین «Hold me» و «Pressed» عوض می شود.
import SwiftUI
struct LongPressDemo: View {
@State private var pressed = false
var body: some View {
Text(pressed ? "Pressed" : "Hold me")
.padding(12)
.background(.blue.opacity(0.1))
.cornerRadius(8)
.onLongPressGesture(minimumDuration: 0.5) {
pressed.toggle()
}
}
}
struct ContentView: View {
var body: some View {
LongPressDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
نکته: اگر بازخورد سریع می خواهی، متن را کوتاه بگذار. همچنین می توانی از انیمیشن های فنری برای نرمی تغییر استفاده کنی.
نمایش پیشرفت هنگام نگه داشتن
با @GestureState وضعیت «در حال نگه داشتن» را می گیری. سپس مقیاس شکل را تغییر می دهی.
import SwiftUI
struct LongPressProgressDemo: View {
@GestureState private var isPressing = false
@State private var done = false
var body: some View {
Circle()
.fill(done ? .green : .gray)
.frame(width: 80, height: 80)
.scaleEffect(isPressing ? 0.9 : 1)
.gesture(
LongPressGesture(minimumDuration: 0.6)
.updating($isPressing) { value, state, _ in
state = value
}
.onEnded { _ in
done.toggle()
}
)
}
}
struct ContentView: View {
var body: some View {
LongPressProgressDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
سه گام عملی برای ژست نگه داشتن
- جای لمس مناسب را انتخاب کن.
- مدت نگه داشتن را مشخص کن.
- بازخورد بصری یا متنی بده.
برای مرور دیگر ژست ها، به ژست ها در SwiftUI برو. همچنین TapGesture برای لمس سریع مناسب است. اگر دنبال همین موضوع هستی، ژست نگه داشتن را نشان دار کن.
جمع بندی سریع
- LongPress برای اقدامات مطمئن تر عالی است.
- مدت را دقیق تنظیم کن.
- بازخورد فوری، تجربه را بهتر می کند.
- @GestureState برای وضعیت لحظه ای است.