RotationGesture (RotationGesture)
اینجا «ژست چرخش» را خیلی ساده می بینیم. «ژست (Gesture)» یعنی حرکت لمسی. با «RotationGesture» می توانی نما را با دو انگشت بچرخانی.
RotationGesture چیست؟
این ژست یک «زاویه (Angle)» می دهد. سپس با .rotationEffect همان زاویه را روی نما اعمال می کنی. درست مثل چرخاندن نقشه در گوشی.
چرخاندن و بازنشانی
در این نمونه، با دو انگشت می چرخانی. سپس با رهاکردن، به صفر درجه برمی گردد.
import SwiftUI
struct RotationDemo: View {
@State private var angle = Angle.zero
var body: some View {
Image(systemName: "arrow.2.circlepath")
.font(.system(size: 48))
.rotationEffect(angle)
.gesture(
RotationGesture()
.onChanged { value in
angle = value
}
.onEnded { _ in
withAnimation(.easeInOut) {
angle = .zero
}
}
)
}
}
struct ContentView: View {
var body: some View {
RotationDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
نکته: مقدار زاویه مثبت یعنی چرخش ساعت گرد. مقدار منفی یعنی پادساعت گرد.
انباشت چرخش
گاه می خواهی هر ژست به مقدار قبلی اضافه شود. پس زاویه جاری و کل را جدا نگه دار.
import SwiftUI
struct RotationAccumDemo: View {
@State private var total: Angle = .zero
@State private var current: Angle = .zero
var body: some View {
VStack(spacing: 12) {
Image(systemName: "arrow.triangle.2.circlepath")
.font(.system(size: 48))
.rotationEffect(total + current)
.gesture(
RotationGesture()
.onChanged { value in
current = value
}
.onEnded { value in
total += value
current = .zero
}
)
Text("Angle: \(Int((total + current).degrees))°")
}
.padding()
}
}
struct ContentView: View {
var body: some View {
RotationAccumDemo()
}
}
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
گام های عملی
@Stateبرای زاویه ها بساز.RotationGestureرا روی نما بگذار.- در
.onChanged، زاویه جاری را تنظیم کن. - در
.onEnded، مجموع را به روز کن.
هشدار: متن ها با چرخش زیاد ممکن است ناخوانا شوند. بنابراین، اندازه و فونت را متعادل نگه دار.
برای «ژست چرخش» این صفحه را نشانه گذاری کن: ژست چرخش. همچنین، برای بزرگ نمایی ببین MagnificationGesture و برای ترکیب ها سر بزن به ترکیب ژست ها.
جمع بندی سریع
- زاویه را از RotationGesture بگیر.
- با rotationEffect اعمال کن.
- می توانی زاویه ها را انباشته کنی.
- بازنشانی نرم تجربه را بهتر می کند.