aboutsummaryrefslogtreecommitdiff
path: root/Sources
diff options
context:
space:
mode:
Diffstat (limited to 'Sources')
-rw-r--r--Sources/SwiftyCrop/Models/CropViewModel.swift2
-rw-r--r--Sources/SwiftyCrop/View/CropView.swift11
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 {