Reputation: 305
I've been trying to update the artwork shown for an item in MPNowPlayingInfoCenter
using MPMediaItemPropertyArtwork
as shown in the following code taken from Apple's docs
if let image = UIImage(named: "image_here") {
nowPlayingInfo[MPMediaItemPropertyArtwork] =
MPMediaItemArtwork(boundsSize: image.size) { size in
return image
}
}
The issue I'm having is that this sets a smaller image as shown in the photo below in the red square. I'm trying to figure out how to set the image in the larger yellow square, and I can't find any documentation that differentiates between the two.
EDIT
vint's answer below clarified that the smaller icon is the app icon. I am however setting the nowPlayingInfo dictionary successfully since my other metadata is reaching the lock screen controls, like the title (blurred), duration, elapsed playback time). It's just the artwork that appears to not being working.
Upvotes: 2
Views: 2233
Reputation: 305
Just in case anyone finds this question and was going crazy like myself, I was able to set the image by correctly resizing my UIImage
to the incoming size
parameter given to the MPMediaItemArtwork
callback function. As it says in the docs:
The request handler returns an image in the newly requested size. The requested size must be less than the boundsSize parameter.
Then setting my image
to the incoming size
parameter with the following extension, the MPMediaItemPropertyArtwork
was finally successfully set.
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)
}
}
Upvotes: 5
Reputation: 78
Obviously you did not successfully set the cover image of the track to
MPNowPlayingInfoCenter
, The image in red square is your app icon, this is MPNowPlayingInfoCenter
's default behavior,
I guess you lost the next step
// set the info dictionary back to default control center
MPNowPlayingInfoCenter.default.nowPlayingInfo = nowPlayingInfo
If you has set that, you should find the failed reason, seed this answer
Upvotes: 0