前回の引用からスクロールとズームの両立は複雑だと分かる。
あえて、単純にスクロールとズームを組み合わせたらどうなるか確認をしておく。
で、下にスクロールビューにイメージズームを入れてみた。
結果、スクロールが優先的に作動してしまう。(1ポイント操作)
上手くすればピンチによるズーム。(2ポイント操作)
何かしらの工夫が必要である。
状況は、ズーム後のスクロールは動作する。
しかし、スクロール範囲はズーム後の画像全体ではない。
最初の画像サイズ領域に限られる。何らかの修正をする必要がある。
import SwiftUI
struct ContentView: View {
@State private var currentScale: CGFloat = 1.0
@State private var lastMagnificationValue: CGFloat = 1.0
var body: some View {
ScrollView([.horizontal,.vertical],showsIndicators: false)
{
Image(uiImage: UIImage(named: "Test")! )
.resizable()
.scaledToFill()
.scaleEffect(currentScale)
.gesture(
MagnifyGesture()
.onChanged { value in
let changeRate = value.magnification / lastMagnificationValue
currentScale *= changeRate
currentScale = max(1.0, currentScale )
lastMagnificationValue = value.magnification
}
.onEnded { value in
lastMagnificationValue = 1.0
}
)
}
.scrollTargetLayout()
.padding()
}
}
スクロールとズームの混在は意図した通りの反応でないとストレスが溜まる。
モード切り替えを入れるなどワンクッションが入るとストレス軽減になるのかな?
【追記】
ズーム後にImageの.frame()でズーム後サイズを算出し設定してみたがスクロール範囲の変化なし。