Apple已弃用iOS 10中init(image:)
中的MPMediaItemArtwork
方法。
什么是新的选择。
该类显示接口显示以下方法,以便在新操作系统版本中可用
public init(boundsSize: CGSize, requestHandler: @escaping (CGSize) -> UIImage)
任何人都知道如何使用它?
同样问题2,上一个问题的一部分:在模拟器中使用MPNowPlayingInfoCenter
在锁屏和控制中心显示正在播放元数据吗?
答案 0 :(得分:25)
您可以使用以下代码:
let image = UIImage(named: "logo")!
let artwork = MPMediaItemArtwork.init(boundsSize: image.size, requestHandler: { (size) -> UIImage in
return image
})
而且,是的,"现在正在玩#34;元数据显示在模拟器中的控制中心上。
答案 1 :(得分:4)
我刚刚看到这个,我也很困惑,但我想这是正确的方法:
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];
}];
该方法 - 在我的案例中是单例“Manager”-Class
- (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;
}
答案 2 :(得分:3)
我一直在想同样的事情,最终找到了苹果对此的解释。
他们说,当请求处理程序时,我们不应该在图像上进行任何昂贵的调整大小操作,而只是简单地从您已经可用的图像中返回紧密匹配的图像。
以下WWDC 2017视频是他们提到的地方。这是关于tvOS的,但至少我们有一些见识。从07:20开始:https://developer.apple.com/videos/play/wwdc2017/251/?time=440
答案 3 :(得分:0)
最小代码:
MPMediaItemArtwork(boundsSize: image.size) { _ in image }