Как создать UIImage из CGImage в Swift?

Я пытаюсь создать 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

Что я делаю неправильно?

Ответы

Ответ 1

Если вы посмотрите на документы в Xcode6, вы увидите, что posterImage() возвращает Unmanaged<CGImage>! (в Swift, в ObjC он возвращает CGImageRef). После некоторого расследования из docs я нашел это:

Когда вы получаете неуправляемый объект из неавтоматизированного API, вы должен немедленно преобразовать его в объект, управляемый памятью работать с ним.

Итак, ваше решение будет:

UIImage(CGImage: group.posterImage().takeUnretainedValue())

Ответ 2

Вы уверены, что group.posterImage не является необязательным?

Вы пробовали

var img = UIImage(CGImage: group.posterImage!)

Ответ 3

Используйте init с CGIImage:

UIImage.init(CGImage: group.posterImage, scale: self.scale, orientation: .UpMirrored)

Ответ 4

Вот пример, который должен работать для вас с 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)