Objective-Cで書かれた画像(NSImage)を回転させるコードをSwiftに移植してみました。
オリジナル
rotate a NSImage · GitHub
https://gist.github.com/Rm1210/10621763
Swiftのコード
extension NSImage { // 角度は反時計回り指定 func rotatedImage(degrees: CGFloat) -> NSImage { let deg = fmod(degrees, 360) if deg == 0 { return self } let orgSize = self.size var maxSize = NSSize() switch deg { case 90, 270, -90, -270: maxSize = NSMakeSize(orgSize.height, orgSize.width) case 180, -180: maxSize = orgSize default: maxSize = NSMakeSize(20+max(orgSize.width, orgSize.height), 20+max(orgSize.width, orgSize.height)) } let rot = NSAffineTransform() rot.rotate(byDegrees: degrees) let center = NSAffineTransform() center.translateX(by: maxSize.width / 2, yBy: maxSize.height / 2) rot.append(center as AffineTransform) let rotatedImage = NSImage(size: maxSize) rotatedImage.lockFocus() rot.concat() let rect = NSMakeRect(0, 0, orgSize.width, orgSize.height) let corner = NSMakePoint(-orgSize.width / 2, -orgSize.height / 2) draw(at: corner, from: rect, operation: .copy, fraction: 1.0) rotatedImage.unlockFocus() return rotatedImage } }