experiment(PodcastPlayerView): add MPMediaItemArtwork to Now Playing — waveform rendered image
This commit is contained in:
@@ -282,12 +282,32 @@ final class PodcastPlayerViewModel {
|
||||
var info: [String: Any] = [:]
|
||||
info[MPMediaItemPropertyTitle] = currentPodcastTitle
|
||||
info[MPMediaItemPropertyArtist] = currentArticleTitle.isEmpty ? "Marks" : currentArticleTitle
|
||||
info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? 1.0 : 0.0
|
||||
info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? Double(playbackSpeed) : 0.0
|
||||
info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime
|
||||
if duration > 1 { info[MPMediaItemPropertyPlaybackDuration] = duration }
|
||||
if let artwork = Self.nowPlayingArtwork {
|
||||
info[MPMediaItemPropertyArtwork] = artwork
|
||||
}
|
||||
MPNowPlayingInfoCenter.default().nowPlayingInfo = info
|
||||
}
|
||||
|
||||
private static let nowPlayingArtwork: MPMediaItemArtwork? = {
|
||||
let size = CGSize(width: 300, height: 300)
|
||||
let renderer = UIGraphicsImageRenderer(size: size)
|
||||
let image = renderer.image { ctx in
|
||||
UIColor.systemBlue.withAlphaComponent(0.15).setFill()
|
||||
ctx.fill(CGRect(origin: .zero, size: size))
|
||||
let config = UIImage.SymbolConfiguration(pointSize: 140, weight: .regular)
|
||||
if let symbol = UIImage(systemName: "waveform.circle.fill", withConfiguration: config) {
|
||||
let tinted = symbol.withTintColor(.systemBlue, renderingMode: .alwaysOriginal)
|
||||
let origin = CGPoint(x: (size.width - tinted.size.width) / 2,
|
||||
y: (size.height - tinted.size.height) / 2)
|
||||
tinted.draw(at: origin)
|
||||
}
|
||||
}
|
||||
return MPMediaItemArtwork(boundsSize: size) { _ in image }
|
||||
}()
|
||||
|
||||
private static func statusLabel(_ status: String) -> String {
|
||||
switch status {
|
||||
case "queued": return "Queued…"
|
||||
|
||||
Reference in New Issue
Block a user