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] = [:]
|
var info: [String: Any] = [:]
|
||||||
info[MPMediaItemPropertyTitle] = currentPodcastTitle
|
info[MPMediaItemPropertyTitle] = currentPodcastTitle
|
||||||
info[MPMediaItemPropertyArtist] = currentArticleTitle.isEmpty ? "Marks" : currentArticleTitle
|
info[MPMediaItemPropertyArtist] = currentArticleTitle.isEmpty ? "Marks" : currentArticleTitle
|
||||||
info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? 1.0 : 0.0
|
info[MPNowPlayingInfoPropertyPlaybackRate] = isPlaying ? Double(playbackSpeed) : 0.0
|
||||||
info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime
|
info[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime
|
||||||
if duration > 1 { info[MPMediaItemPropertyPlaybackDuration] = duration }
|
if duration > 1 { info[MPMediaItemPropertyPlaybackDuration] = duration }
|
||||||
|
if let artwork = Self.nowPlayingArtwork {
|
||||||
|
info[MPMediaItemPropertyArtwork] = artwork
|
||||||
|
}
|
||||||
MPNowPlayingInfoCenter.default().nowPlayingInfo = info
|
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 {
|
private static func statusLabel(_ status: String) -> String {
|
||||||
switch status {
|
switch status {
|
||||||
case "queued": return "Queued…"
|
case "queued": return "Queued…"
|
||||||
|
|||||||
Reference in New Issue
Block a user