diff options
| author | Fuwn <[email protected]> | 2025-02-24 08:04:44 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-24 08:04:44 -0800 |
| commit | e53bc133b7161d5a0e92263f601e737046ccf656 (patch) | |
| tree | b40d0d12670a4c0abbfabc17943f9497f796d765 | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-e53bc133b7161d5a0e92263f601e737046ccf656.tar.xz sora-testing-e53bc133b7161d5a0e92263f601e737046ccf656.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Views/InteractiveImageView.swift | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Sora/Views/InteractiveImageView.swift b/Sora/Views/InteractiveImageView.swift index 7afde7d..a36d34f 100644 --- a/Sora/Views/InteractiveImageView.swift +++ b/Sora/Views/InteractiveImageView.swift @@ -8,6 +8,7 @@ struct InteractiveImageView: View { @State private var previousScale = 0.0 @State private var currentOffset: CGSize = .zero @State private var previousOffset: CGSize = .zero + @State private var zoomAnchor: UnitPoint = .center var body: some View { GeometryReader { geometry in @@ -15,7 +16,7 @@ struct InteractiveImageView: View { image .resizable() .scaledToFit() - .scaleEffect(currentScale) + .scaleEffect(currentScale, anchor: zoomAnchor) .offset(currentOffset) .frame(width: screenWidth, height: screenHeight) .clipped() @@ -23,6 +24,10 @@ struct InteractiveImageView: View { MagnifyGesture() .onChanged { gesture in withAnimation(.interactiveSpring()) { + if previousScale == 0 { + zoomAnchor = gesture.startAnchor + } + currentScale = previousScale + gesture.magnification - (previousScale == 0 ? 0 : 1) } @@ -52,10 +57,11 @@ struct InteractiveImageView: View { TapGesture(count: 2) .onEnded { withAnimation { - currentScale = 1.0 + currentScale = 1 previousScale = 0 currentOffset = .zero previousOffset = .zero + zoomAnchor = .center } } ) |