2014-06-20 3 views
14

Я пытаюсь создать UIImage из ALAssetsGroup#posterImage. В Objective-C, я мог бы просто позвонить [UIImage imageWithCGImage:group.posterImage] но в Swift, UIImage(CGImage: group.posterImage) дает мне ошибку компилятора:Как создать UIImage из CGImage в Swift?

Could not find an overload for 'init' that accepts the supplied arguments 

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

+0

Настоящая проблема в том, что сообщение «не удалось найти перегрузку» не очень информативно. Я предлагаю вам подать запрос об улучшении. Свои сообщения об ошибках Swift может значительно улучшить. – matt

ответ

2

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

вы пробовали

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

Да, я уверен. Вышеприведенный код дает ту же ошибку компилятора. – Bill

24

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

When you receive an unmanaged object from an unannotated API, you should immediately convert it to a memory managed object before you work with it.

Так что ваше решение будет:

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

Это не помогает, но сообщение об ошибке, которое я получил от этого кода, сделал: «no method for»() -> Неуправляемый ! '. Поэтому 'posterImage' является' func', а не свойством. Добавление parens после posterImage сделал трюк. – Bill

+0

@Bill, aw, спасибо. Я не поймал, что – Firo

+0

Swift 3,4 изменить на UIImage.init (cgImage: ......) – SHS

0

Использование INIT с CGIImage:

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

, если мне нужно увеличить масштаб изображения, как это возможно? – niks290192

+0

просто установите желаемый масштаб с помощью значения CGFloat – Pichirichi

0

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