_ALAssetsGroup#posterImage
_メソッドからUIImage
を作成しようとしています。 Objective-Cでは単純に_[UIImage imageWithCGImage:group.posterImage]
_を呼び出すことができましたが、SwiftではUIImage(CGImage: group.posterImage)
を使用するとコンパイラエラーが発生します。
_Could not find an overload for 'init' that accepts the supplied arguments
_
何が悪いのですか?
Xcode6のドキュメントを見ると、posterImage()
がUnmanaged<CGImage>!
を返すことがわかります(Swiftでは、ObjCではCGImageRef
を返します)。 docs から調査したところ、次のことがわかりました。
注釈なしのAPIからアンマネージオブジェクトを受け取ったら、それを操作する前に、すぐにメモリマネージオブジェクトに変換する必要があります。
だからあなたの解決策は:
UIImage(CGImage: group.posterImage().takeUnretainedValue())
Group.posterImageはオプションではありませんか?
やってみました
var img = UIImage(CGImage: group.posterImage!)
Xcode 8.3で動作するはずの例を次に示します。
let frame = CGRect(Origin: CGPoint(x: 0, y: 0), size: CGSize(width: 1920, height: 1080))
let cgImage = CIContext().createCGImage(CIImage(color: .black()), from: frame)!
let uiImage = UIImage(cgImage: cgImage)
CGIImageでinitを使用します。
UIImage.init(CGImage: group.posterImage, scale: self.scale, orientation: .UpMirrored)