summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-24 08:04:44 -0800
committerFuwn <[email protected]>2025-02-24 08:04:44 -0800
commite53bc133b7161d5a0e92263f601e737046ccf656 (patch)
treeb40d0d12670a4c0abbfabc17943f9497f796d765
parentfeat: Development commit (diff)
downloadsora-testing-e53bc133b7161d5a0e92263f601e737046ccf656.tar.xz
sora-testing-e53bc133b7161d5a0e92263f601e737046ccf656.zip
feat: Development commit
-rw-r--r--Sora/Views/InteractiveImageView.swift10
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
}
}
)