2016-12-16 121 views
4

蘋果已棄用init(image:)方法MPMediaItemArtwork在iOS 10中。 什麼是新的替代方案。MPMediaItemArtwork init(圖片:)在iOS 10.0中棄用

類的顯示界面顯示如下方法可用在新的操作系統版本

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

任何人都知道如何使用它?

還質疑2,前面的問題的一部分:是否顯示現在玩元使用MPNowPlayingInfoCenter工作在模擬器鎖屏和控制中心嗎?

回答

18

您可以使用下面的代碼:

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

而且,是的,「現在玩」元數據顯示在模擬器中的控制中心。

+0

你可以對這個MPMediaItemArtwork初始化器使用的「爲什麼」和「如何」(地獄......)有所瞭解嗎?這個街區有什麼期望?以所提供的大小返回UIImage?我在網上搜索,無法獲得合理的文檔。 –

+1

@MottiShneor需要各種尺寸的圖像 - 控制中心,鎖屏,擴展控制中心,iPhone,iPad。如果您的媒體有不同大小的圖稿,則可以在iOS請求時返回適當的媒體。 –

+0

但是無論大小如何,您都會一次又一次返回相同的圖像?將圖像的大小調整爲適合?這是否可以接受? –

3

我剛纔看到了這一點,我很困惑過,但我想這是正確的做法:

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

的方法 - 在我的單身「經理」的情況下-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; 
} 
相關問題