個人開発者が勉強がてらまとめているだけのサイトです

2本指で回転 Two-finger Rotate

写真やスタンプを2本の指でひねると、その向きに回転する。指を広げれば同時に拡大もできる。

別名
ひねって回転回転ジェスチャー2本指ひねりRotate GestureRotation Gesture
動き
2本指でひねる回転する広げると拡大
作り方
標準ウィジェット Flutter に入っているものだけで作れます

本物の Flutter ウィジェットが動きます(初回は数秒かかります)

別タブで大きく開く ↗

どんなもの?

写真の編集やスタンプの配置、地図の向きを変えるときの操作です。

2本指の操作は GestureDetector の onScaleStart / onScaleUpdate にまとめて届き、

回転は details.rotation(ラジアン)、拡大は details.scale で受け取れます。

どちらも「指を置いたときから」の変化量なので、onScaleStart で今の角度を覚えておき、足し合わせます。

PC のマウスでは2本指を使えないので、ボタンやスライダーの回転手段も用意しておくと親切です。

こんなときに

  • 写真・スタンプ・図形などを自由に置いて編集する画面

避けたい場面

  • 回転させる意味がない物(うっかり回ると戻すのが面倒)

最小コード

GestureDetector(
  onScaleStart: (_) {
    baseAngle = angle;
    baseScale = scale;
  },
  onScaleUpdate: (d) => setState(() {
    angle = baseAngle + d.rotation;          // ラジアン
    scale = (baseScale * d.scale).clamp(0.5, 3.0);
  }),
  child: Transform.rotate(
    angle: angle,
    child: Transform.scale(scale: scale, child: sticker),
  ),
)

使うウィジェット

GestureDetector(onScaleUpdate)ScaleUpdateDetails.rotationTransform.rotate

似ているもの・一緒に見たいもの

触ってみる ↗
ジェスチャー ピンチズームPinch to Zoom

2本指で広げると拡大、つまむと縮小、1本指で動かすと見る場所が移動する。

2本指で広げる
触ってみる ↗
ジェスチャー 回すダイヤルRotary Knob

丸いつまみの周りを、円を描くように指でなぞると、つまみが回って音量などの値が変わる。

円を描いてなぞる