Angle構造体は、角度をあらわす構造体です。
一般的な角度(度数法)の他にラジアン(弧度法)でもアクセスできます。
環境
この記事の情報は次のバージョンで動作確認しています。
【Xcode】11.5
【Swift】5.2.4
【iOS】13.5
【macOS】Catalina バージョン 10.15.4
【Swift】5.2.4
【iOS】13.5
【macOS】Catalina バージョン 10.15.4
インスタンス生成方法
イニシャライザを使う方法と、タイプメソッド/タイププロパティを使う方法があります。
コード上は後者の方が簡潔に記述できます。
なお、右水平方向が0度/0ラジアンになります。
イニシャライザで生成
1 2 3 4 5 |
Angle() // 値0のインスタンス生成 Angle(degrees: Double) // 角度(度数法)指定でインスタンス生成 Angle(radians: Double) // ラジアン(弧度法)指定でインスタンス生成 |
使用例
図形の回転を、角度0、-45度、1ラジアンで表示する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
struct ContentView: View { var body: some View { HStack { /// 角度=0 Image(systemName: "tortoise.fill") .rotationEffect(Angle()) /// 角度=-45度 Image(systemName: "tortoise.fill") .rotationEffect(Angle(degrees: -45)) /// 角度=1ラジアン Image(systemName: "tortoise.fill") .rotationEffect(Angle(radians: 1)) } .font(.system(size: 80)) .foregroundColor(.blue) } } |
タイプメソッド/タイププロパティで生成
1 2 3 4 5 6 7 8 |
/// タイプメソッド(静的メソッド) Angle.degress(Double) -> Angle // 角度(度数法)指定でインスタンス生成 Angle.radians(Double) -> Angle // ラジアン(弧度法)指定でインスタンス生成 /// タイププロパティ(静的プロパティ) Angle.zero -> Angle // 値0のインスタンス生成 |
使用例
先程のサンプルを、タイプメソッド/タイププロパティでの生成に置き換えた例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
struct ContentView: View { var body: some View { HStack { /// 角度=0 Image(systemName: "tortoise.fill") .rotationEffect(.zero) /// 角度=-45度 Image(systemName: "tortoise.fill") .rotationEffect(.degrees(-45)) /// 角度=1ラジアン Image(systemName: "tortoise.fill") .rotationEffect(.radians(1)) } .font(.system(size: 80)) .foregroundColor(.blue) } } |
使用可能なプロパティ
1 2 3 4 |
degrees: Double // 角度(度数法)を保持します。 radians: Double // ラジアン(弧度法)を保持します。 |
角度を表す2種類のプロパティがあります。
それぞれ設定と参照が可能で、一方を変更するともう一方の値も更新されます。
使用例
スライダーを使ってイメージを回転させるサンプルです。
Angle構造体の2つのプロパティにアクセスしていて、degreesを変えるとradiansの値も変わるのが確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
struct ContentView: View { @State private var angle = Angle() var body: some View { ZStack { Image(systemName: "tortoise.fill") .rotationEffect(angle) .font(.system(size: 80)) .foregroundColor(.blue) VStack { Spacer() Text("\(angle.degrees) 度") Text("\(angle.radians) ラジアン") Slider(value: $angle.degrees, in: -180...180) .padding(.horizontal) }.font(.title) } } } |
使用可能な演算子
Angle構造体は、以下に示す演算子が使用可能です。
比較演算子
==、!=、<、>、<=、>=、
範囲演算子
...、..<
あわせて読みたい記事
【SwiftUI】Viewの回転(rotationEffect)
指定された点を中心にViewを回転させるrotarionEffectの使い方を解説します。