【iOS】Swiftでtransformから角度、ラジアン、ディグリー、スケールを求める
メモ
Swift 4 でtransformから角度、ラジアン、ディグリー、スケールを求める 忘れがちなので・・・。
let transform = view.transform
let radians = atan2(transform.b, transform.a)
let degrees = radians * 180 / .pi
let scale = sqrt(abs(transform.a * transform.d - transform.b * transform.c))
import CoreGraphics extension CGAffineTransform { var angle: CGFloat { return atan2(b, a) } var radians: CGFloat { return angle } var degrees: CGFloat { return angle * 180.0 / CGFloat.pi } var scale: CGPoint { return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d)) } } // 例として、適当な CGAffineTransform を作成 let transform = CGAffineTransform(rotationAngle: CGFloat.pi/4).scaledBy(x: 2.0, y: 1.5) let angleInRadians = transform.radians let angleInDegrees = transform.degrees let scale = transform.scale print("Angle in radians: \(angleInRadians)") print("Angle in degrees: \(angleInDegrees)") print("Scale: \(scale)")
2024/06/14 、コメント多めに書き直してみた。
import CoreGraphics // CGAffineTransformの拡張機能を定義 extension CGAffineTransform { // 現在の変換の回転角度をラジアン単位で取得 var angle: CGFloat { return atan2(b, a) } // 回転角度をラジアンで取得('angle'プロパティのエイリアス) var radians: CGFloat { return angle } // 回転角度を度数法で取得 var degrees: CGFloat { return angle * 180.0 / CGFloat.pi } // 現在の変換のスケールをCGPointとして取得 var scale: CGPoint { return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d)) } } // 例として、回転とスケールを含むCGAffineTransformを作成 let transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4).scaledBy(x: 2.0, y: 1.5) // 回転角度をラジアンで取得 let angleInRadians = transform.radians // 回転角度を度数法で取得 let angleInDegrees = transform.degrees // スケールを取得 let scale = transform.scale // 結果を出力 print("Angle in radians: \(angleInRadians)") // 出力: 回転角度(ラジアン) print("Angle in degrees: \(angleInDegrees)") // 出力: 回転角度(度数法) print("Scale: \(scale)") // 出力: スケール
コメント
コメントを投稿