はじめに
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が便利になってきてて嬉しいですね