InitMediaItemArtwork init(image:) устарел в iOS 10.0

Apple устарела init(image:) метод в MPMediaItemArtwork в iOS 10. Какая новая альтернатива.

класс показывает интерфейс показывает метод ниже, чтобы быть доступным в новой версии ОС

public init(boundsSize: CGSize, requestHandler: @escaping (CGSize) -> UIImage)

Кто-нибудь знает, как его использовать?

Также вопрос 2, часть предыдущего вопроса: отображает ли теперь воспроизводимые метаданные на экране блокировки и в центре управления с помощью MPNowPlayingInfoCenter работа в симуляторе?

3 ответа

Решение

Вы можете использовать следующий код:

let image = UIImage(named: "logo")!
let artwork = MPMediaItemArtwork.init(boundsSize: image.size, requestHandler: { (size) -> UIImage in
        return image
})

И, да, метаданные "сейчас играет" отображаются в центре управления в симуляторе.

Мне было интересно то же самое, и в итоге я нашел объяснение Apple для этого.

Они говорят, что мы не должны выполнять дорогостоящие операции по изменению размера изображения при запросе обработчика, а просто возвращать близко совпадающее изображение из уже доступных вам.

Следующее видео WWDC 2017, где они упоминают это. Речь идет о tvOS, но, по крайней мере, мы получили некоторое представление. Начало в 07:20: https://developer.apple.com/videos/play/wwdc2017/251/?time=440

Я видел это только сейчас, и я тоже сбит с толку, но я думаю, что это правильный путь:

self.remoteArtwork = [[MPMediaItemArtwork alloc] initWithBoundsSize:CGSizeMake(600, 600) requestHandler:^UIImage * _Nonnull(CGSize size) {

    UIImage *lockScreenArtworkApp = [UIImage imageNamed:@"lockScreenLogo"];

    return [self.manager resizeImageWithImage:lockScreenArtworkApp scaledToSize:size];        
}];

Способ - в моем случае в синглтоне "Менеджер"-Класс

- (UIImage *)resizeImageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    // In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
    // Pass 1.0 to force exact pixel size.
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

Минимальный код:

MPMediaItemArtwork(boundsSize: image.size) { _ in image }
Другие вопросы по тегам