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 }