diff options
author | leoz <leoz@yahoo.com> | 2024-02-21 11:57:12 -0500 |
---|---|---|
committer | leoz <leoz@yahoo.com> | 2024-02-21 11:57:12 -0500 |
commit | f76d234da71a5c2c8d23ed6a6516b809337f5bfb (patch) | |
tree | 13817db91c53381fd6d83d954563b6c29951c0c4 | |
parent | c2502f4cf0ffa2f2680021d3a55105527eceb4f0 (diff) |
Add rotation gesture
-rw-r--r-- | Sources/SwiftyCrop/Models/CropViewModel.swift | 2 | ||||
-rw-r--r-- | Sources/SwiftyCrop/View/CropView.swift | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/Sources/SwiftyCrop/Models/CropViewModel.swift b/Sources/SwiftyCrop/Models/CropViewModel.swift index f597fd4..a9557ac 100644 --- a/Sources/SwiftyCrop/Models/CropViewModel.swift +++ b/Sources/SwiftyCrop/Models/CropViewModel.swift @@ -10,6 +10,8 @@ class CropViewModel: ObservableObject { @Published var lastScale: CGFloat = 1.0 @Published var offset: CGSize = .zero @Published var lastOffset: CGSize = .zero + @Published var angle: Angle = Angle(degrees: 0) + @Published var lastAngle: Angle = Angle(degrees: 0) init( maskRadius: CGFloat, diff --git a/Sources/SwiftyCrop/View/CropView.swift b/Sources/SwiftyCrop/View/CropView.swift index 03de910..c76f7f8 100644 --- a/Sources/SwiftyCrop/View/CropView.swift +++ b/Sources/SwiftyCrop/View/CropView.swift @@ -64,6 +64,14 @@ struct CropView: View { .onEnded { _ in viewModel.lastOffset = viewModel.offset } + + let rotationGesture = RotationGesture() + .onChanged { value in + viewModel.angle = value + } + .onEnded { _ in + viewModel.lastAngle = viewModel.angle + } VStack { Text("interaction_instructions", tableName: localizableTableName, bundle: .module) @@ -76,6 +84,7 @@ struct CropView: View { Image(uiImage: image) .resizable() .scaledToFit() + .rotationEffect(viewModel.angle) .scaleEffect(viewModel.scale) .offset(viewModel.offset) .opacity(0.5) @@ -91,6 +100,7 @@ struct CropView: View { Image(uiImage: image) .resizable() .scaledToFit() + .rotationEffect(viewModel.angle) .scaleEffect(viewModel.scale) .offset(viewModel.offset) .mask( @@ -101,6 +111,7 @@ struct CropView: View { .frame(maxWidth: .infinity, maxHeight: .infinity) .simultaneousGesture(magnificationGesture) .simultaneousGesture(dragGesture) + .simultaneousGesture(rotationGesture) HStack { Button { |