##やりたいこと
Viewの配置場所指定などで頻繁に使用する、おなじみのCGRect。
CGRectの生成方法は
CGRect(origin: CGPoint, size: CGSize)
または
CGRect(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
という感じで、
四角形の左上の座標指定 + 幅・高さ指定
で生成します。
なのですが、実際には
中心の座標指定 + 幅・高さ指定
からCGRectを生成したいシーンはよくあるかと思います。
毎度毎度、これらの値からoriginを計算してCGRect生成するのはめんどくさいので、
中心の座標 + 幅・高さ
で一発でCGRectを生成できるようにしてしまいたいですね。
##解決方法
CGRectを 中心座標 + サイズ の情報で生成でいるイニシャライザを、
CGRectのExtensionとして実装してしまえば良いです。
CGRectExtension.swift
import UIKit
extension CGRect {
init(center: CGPoint, size: CGSize) {
let originX = center.x - size.width / 2.0
let originY = center.y - size.height / 2.0
self.init(x: originX, y: originY, width: size.width, height: size.height)
}
}
これで、中心座標とサイズから一発でCGRectを生成できます。
Playgroundで実行した結果が下記。
##動作確認環境
Xcode: 13.1
iOS: 15.1
Swiftバージョン: Swift 5.5.1
以上