指定された回転軸を中心に、3次元でViewを回転させるrotation3DEffectの使い方を解説します。
環境
この記事の情報は次のバージョンで動作確認しています。
【Xcode】11.4.1
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
【Swift】5.2
【iOS】13.4.1
【macOS】Catalina バージョン 10.15.4
基本的な使い方
| 
					 1 2 3  | 
						rotation3DEffect(Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat)  | 
					
引数(axis)で指定した回転軸に対してAngle構造体で指定した角度でViewを回転させます。
言葉で説明するのは難しいので、後で示す使用例で実際の動きを確認して下さい。
基本以外の引数
| 
					 1 2 3 4 5 6 7  | 
						rotation3DEffect(Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat),     anchor: UnitPoint = .center,     anchorZ: CGFloat = 0,     perspective: CGFloat = 1 )  | 
					
anchor
回転の中心をUnitPoint構造体で指定します。
デフォルトは.centerです。
anchorZ
回転の中心の奥行き位置を指定します。
デフォルトは0です。
perspective
遠近法効果の強度を指定します。
0が効果無しで、デフォルトは1です。
使用例
スライダーを使って、回転角度と回転軸を動的に変更するサンプルです。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66  | 
						struct ContentView: View {     @State private var angle = Angle(degrees: 0.0)  // 回転角度     @State private var axisX: CGFloat = 0.0         // 回転軸のX座標     @State private var axisY: CGFloat = 0.0         // 回転軸のY座標     @State private var axisZ: CGFloat = 0.0         // 回転軸のZ座標     @State private var anchorZ: CGFloat = 0.0       // 回転中心の奥行き位置     @State private var perspective: CGFloat = 1.0   // 遠近法効果強度     var body: some View {         ZStack {             /// タイトルプレート表示             Text("カピ通信")                 .font(.largeTitle)                 .padding()                 .background(Color.green)                 .rotation3DEffect(angle,                                   axis: (x: axisX, y: axisY, z: axisZ),                                   anchorZ: anchorZ,                                   perspective: perspective)             /// パラメータリセットボタン             VStack {                 Button("Reset") {                     self.angle.degrees = 0.0                     self.axisX = 0.0                     self.axisY = 0.0                     self.axisZ = 0.0                     self.anchorZ = 0.0                     self.perspective = 1.0                 }.padding()                 Spacer()             }             /// 角度調整             HStack {                 VStack {                     Spacer()                     Text("角度:\(angle.degrees, specifier: "%.2f")")                     Slider(value: $angle.degrees, in: -180...180)                 }.padding()                 Spacer(minLength: 250)             }             /// 回転軸調整             HStack {                 Spacer()                 VStack {                     Text("X:\(axisX, specifier: "%.2f")")                     Slider(value: $axisX, in: -1.0...1.0)                     Text("Y:\(axisY, specifier: "%.2f")")                     Slider(value: $axisY, in: -1.0...1.0)                     Text("Z:\(axisZ, specifier: "%.2f")")                     Slider(value: $axisZ, in: -1.0...1.0)                     Text("anchorZ:\(anchorZ, specifier: "%.2f")")                     Slider(value: $anchorZ, in: -100...100)                     Text("perspective:\(perspective, specifier: "%.2f")")                     Slider(value: $perspective, in: -10...10)                 }                 .frame(width: 200)                 .padding()             }         }     } }  | 
					
あわせて読みたい記事

【SwiftUI】Viewの回転(rotationEffect)
指定された点を中心にViewを回転させるrotarionEffectの使い方を解説します。

【SwiftUI】Viewの拡大と縮小(scaleEffect)
Viewを拡大・縮小させるscaleEffectの使い方を解説します。 このModifierは、描画された結果を拡大/縮小しているので、あまり拡大しすぎるとジャギーが目立つ場合があります。

【SwiftUI】UnitPointの使い方
UnitPointはViewの相対的な位置を定義する構造体です。 用途としては、例えばrotationEffectを使ってViewを回転する時の中心点の指定などがあります。

  
  
  
  

