[SwiftUI] MagnificationGesture による画像のピンチイン、ピンチアウト

画像を拡大・縮小するにはMagnificationGestureを使うと可能です。Gestureを使うのでピンチイン・ピンチアウトになります。

Xcode 13.4.1

MagnificationGesture

 
最初に、MagnificationGesture にサンプルコードがあるのでそのまま実装してみます。


これを実行してみると、updatingを使っているのでGesture後の状態は保持されず元に戻ります。gestureが終わればリセットするという説明です

 
確かにピンチイン・ピンチアウトができるのですが、これでは画像を拡大縮小したままにはできないので他の機能を使います。
 

 

Callbacks

 
MagnificationGestureで使うCallbackのスペックで、画像を拡大縮小させつつ表示するにはonChangedが使えます。

updating: Gestureが変化したときにgesture state propertyをアップデートする、ただし値は保持されない


onChanged:Gestureが変化したときに実行するアクションを追加


onEnded:Gestureが終わった時のアクションを追加


MagnificationGesture.Value:Gestureの変化の値, CGFloat

 

画像の拡大

 
Gestureを使う前に、
画像を拡大するにはImageのサイズ変更を反映させる必要があるため、中間的に
resizableとscaleEffectを使います。

  • resizable: リサイズ可能なスペースにフィットするようにモードを設定
  • scaleEffect: 指定された垂直および水平のサイズでスケーリング

適当な画像を(sample_img@2x.jpg) Assets.xcassets に配置

ここではボタンでスケーリングさせることを確認します


 
ボタンをタップすることでサイズが増加していきました
 

 

サンプルコード

 
ボタンを使ってサイズを変化させたところをGestureを使います。

ContentView


 

PreviewやSimulatorで確認するときは(option) キーを押しながらマウスを操作するとピンチイン、ピンチアウトが確認できます。あるいは実機
 

 
 
References:
Gestures | Apple Developer Documentation
MagnificationGesture – SwiftUI | Apple Developer
MagnificationGesture – SwiftUI | Apple Developer
onChanged(_:) – MagnificationGesture | Apple Developer
onEnded(_:) – MagnificationGesture | Apple Developer
Image – SwiftUI | Apple Developer Documentation
scaleEffect(_:anchor:) – SecureField | Apple Developer
resizable(capInsets:resizingMode:) – Apple Developer


誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:


シェアする

  • このエントリーをはてなブックマークに追加

フォローする