はじめに
iOS17からRotateGesture()という機能が追加されました。
これを使用してジェスチャーでViewを回転させることができます。
サンプルアプリ
実装
公式ドキュメントにあるコードです。
import SwiftUI
struct ContentView: View {
    @State private var angle = Angle(degrees: 0.0)
    var rotation: some Gesture {
        RotateGesture()
            .onChanged { value in
                angle = value.rotation
            }
    }
    var body: some View {
        Rectangle()
            .frame(width: 200, height: 200, alignment: .center)
            .rotationEffect(angle)
            .gesture(rotation)
    }
}
解説
現在の角度を格納している変数です。
@State private var angle = Angle(degrees: 0.0)
現在の角度をrotationEffectでViewに反映させています。
Rectangle()
    .frame(width: 200, height: 200, alignment: .center)
    .rotationEffect(angle)
    .gesture(rotation)
上記コードのgestureでrotationを指定しています。
rotationは以下のようになっています。
RotateGesture()が変化するとvalueで値が流れてきます。
value内のrotationを取得して、現在の角度を更新しています。
var rotation: some Gesture {
    RotateGesture()
        .onChanged { value in
            angle = value.rotation
        }
}
おわり
iOS17から使えるようになるのでちゃんと使われるようになるのはまだ先だと思いますが、SwiftUIが便利になってきてて嬉しいですね

