如何为 MPNowPlayingInfoCenter 设置艺术品图像

问题描述

我一直在尝试使用 MPNowPlayingInfoCenter 更新为 MPMediaItemPropertyArtwork 中的项目显示的插图,如下面的代码所示Apple's docs

if let image = UIImage(named: "image_here") {
    NowPlayingInfo[MPMediaItemPropertyArtwork] =
        MPMediaItemArtwork(boundsSize: image.size) { size in
            return image
    }
}

我遇到的问题是,这会设置一个较小的图像,如下面的红色方块中的照片所示。我想弄清楚如何在较大的黄色方块中设置图像,但找不到任何区分两者的文档。

enter image description here

编辑

vint 下面的回答澄清了较小的图标是应用程序图标。然而,我成功地设置了 NowPlayingInfo 字典,因为我的其他元数据正在到达锁定屏幕控件,如标题(模糊)、持续时间、已播放时间)。这只是艺术品似乎不起作用。

解决方法

以防万一有人发现这个问题并且像我一样发疯,我能够通过将我的 UIImage 正确调整为传入 size 参数来设置图像给 MPMediaItemArtwork回调函数。正如 docs 中所说:

请求处理程序以新请求的大小返回图像。 请求的大小必须小于 boundsSize 参数。

然后使用以下扩展名将我的 image 设置为传入的 size 参数,最终成功设置了 MPMediaItemPropertyArtwork

extension UIImage {
    func imageWith(newSize: CGSize) -> UIImage {
        let renderer = UIGraphicsImageRenderer(size: newSize)
        let image = renderer.image { _ in
            self.draw(in: CGRect.init(origin: CGPoint.zero,size: newSize))
        }
        return image.withRenderingMode(self.renderingMode)
    }
}
,

显然你没有成功地将曲目的封面图片设置为 MPNowPlayingInfoCenter,红色方块中的图片是您的应用图标,这是MPNowPlayingInfoCenter的默认行为,

我猜你错过了下一步

// set the info dictionary back to default control center
MPNowPlayingInfoCenter.default.nowPlayingInfo = nowPlayingInfo

如果你已经设置了,你应该找到失败的原因,seed this answer