我尝试使用UIImage
方法创建ALAssetsGroup#posterImage
。在Objective-C中,我可以简单地调用[UIImage imageWithCGImage:group.posterImage]
,但在Swift中,UIImage(CGImage: group.posterImage)
给出了编译器错误:
Could not find an overload for 'init' that accepts the supplied arguments
我做错了什么?
答案 0 :(得分:28)
如果您查看Xcode6中的文档,您会看到posterImage()
返回Unmanaged<CGImage>!
(在Swift中,在ObjC中它返回CGImageRef
)。经过docs的一些调查后我发现了这个:
当您从未注释的API收到非托管对象时,您 应该立即将它转换为内存管理对象 与之合作。
所以你的解决方案是:
UIImage(CGImage: group.posterImage().takeUnretainedValue())
答案 1 :(得分:3)
你确定group.posterImage不是可选的吗?
你试过吗
var img = UIImage(CGImage: group.posterImage!)
答案 2 :(得分:1)
以下是一个适用于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)
答案 3 :(得分:0)
将init与CGIImage一起使用:
UIImage.init(CGImage: group.posterImage, scale: self.scale, orientation: .UpMirrored)