MPMediaItemArtwork init(image:) deprecated in iOS 10.0

你离开我真会死。 提交于 2019-12-21 07:25:32

问题


Apple has deprecated init(image:) method in MPMediaItemArtwork in iOS 10. What is the new alternative.

the class shows interface shows method below to be available in the new OS version

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

Anyone know how to use it?

Also question 2, part of the previous question: Does showing now playing metadata on the lock-screen and control-center using MPNowPlayingInfoCenter work in the simulator?


回答1:


You can use the following code:

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

And, yes, "now playing" metadata shows on the control center in the simulator.




回答2:


I was wondering the same and ended up finding Apple's explanation for this.

They say we shouldn't do any expensive resizing operations on the image when handler is requested, but instead simply return the closely matching image out of ones already available to you.

The following WWDC 2017 video is where they mention it. It's about tvOS, but at least we get some insight. Starts at 07:20: https://developer.apple.com/videos/play/wwdc2017/251/?time=440




回答3:


I saw this just now and I'm confused too, but I guess this is the right way:

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];        
}];

The method - in my case in a singleton "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;
}



回答4:


Minimum code:

MPMediaItemArtwork(boundsSize: image.size) { _ in image }


来源:https://stackoverflow.com/questions/41191452/mpmediaitemartwork-initimage-deprecated-in-ios-10-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!