İçinde müzik çaları olan bir uygulama yapıyorum. Üzerinde uzun zamandır çalışmamıştım ama en son çalıştığım zaman nowPlayingInfo
çalışıyordu. Şimdi, Swift 3'e güncellediğimde, her şey ilerleme çubuğu dışında çalışır.MPNowPlayingInfoCenter ilerleme çubuğunu güncelleştirmeyi durdurdu
Burada, ırk koşulları hakkında konuşulan ve bir şey tarafından geçersiz kılınan ancak neyin neden olduğunu anlayamadığım birkaç benzer soru gördüm. Bu yardımcı olursa AVQueuePlayer
kullanıyorum.
Atla ve önceki düğmeler çalışır, albüm resmi, başlığı ve sanatçı mükemmel şekilde güncellenir ancak geçen süre güncellenmez. Hata ayıkladığımda, MPNowPlayingInfoCenter.default().nowPlayingInfo
numaralı MPNowPlayingInfoPropertyElapsedPlaybackTime
doğru sayıları gösteriyor, ancak denetim merkezindeki gerçek ekran değil. Genellikle, ilerleme 0:01'de kalkar ve sadece hareket etmez. Ancak, uygulamamdaki kaydırıcıyı kullanmayı ve kontrol merkezine geri dönmeyi seçersem, aradığım süreyi gösterir, ancak bu süre boyunca kalır. Diğer sorular ve tarafından tavsiye edildiği
func setNowPlaying(_ dura: Float, timePlayed: Float) {
let s = songs[playbackInstance.currentSongIndex]
let albumArt = MPMediaItemArtwork.init(boundsSize: CGSize(width: 480, height: 360), requestHandler: { (size) -> UIImage in
return self.songImageView.image ?? #imageLiteral(resourceName: "WhiteMusic")
})
let songInfo: [String: Any]? = [
MPMediaItemPropertyTitle: s.name,
MPMediaItemPropertyArtist: s.artist,
MPMediaItemPropertyArtwork: albumArt,
MPMediaItemPropertyPlaybackDuration: dura,
MPNowPlayingInfoPropertyElapsedPlaybackTime: CMTimeGetSeconds(player.currentTime())
]
MPNowPlayingInfoCenter.default().nowPlayingInfo = songInfo
}
ben yönteme geçirilir timePlayed
değişkene MPNowPlayingInfoPropertyElapsedPlaybackTime
ayarlamak için kullanılan, ancak çalışma değildi çünkü ben player.currentTime()
çalıştı: Burada
setNowPlaying
kodudur Muhtemelen zaten kullandığımdan daha iyi bir ölçüdür.
@IBAction func sliderChanged(_ sender: UISlider) {
if timer.isValid {
currentTimeLabel.text = secondsToText(sender.value)
player.seek(to: CMTimeMakeWithSeconds(Float64(sender.value), player.currentItem!.currentTime().timescale))
}
}
kontrol merkezi bilgi güncelleyecektir tek şey Nedense: Burada
yardımcı olur durumda arayan kodudur.
Hangi ileti dizisi setNowPlaying() çağrılıyor? Ana iş parçacığında mı yoksa ikincil mi? –
@CharlesSrstka ana konu – lagoon