如何为 MPNowPlayingInfoCenter 设置艺术图片

How to Set Artwork Image for MPNowPlayingInfoCenter

我一直在尝试使用 MPMediaItemPropertyArtwork 更新 MPNowPlayingInfoCenter 中显示的项目的艺术作品,如以下代码所示 Apple's docs

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

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

编辑

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

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

我猜你下一步输了

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

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

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

The request handler returns an image in the newly requested size. The requested size must be less than the boundsSize parameter.

然后将我的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)
    }
}

if let image = UIImage(named: "image_here") {
    nowPlayingInfo[MPMediaItemPropertyArtwork] =
        MPMediaItemArtwork(boundsSize: image.size) { size in
            // Extension used here to return newly sized image
            return image.imageWith(newSize: size)
    }
}