无法显示当前在 Swift 中播放的歌曲的标题?

Posted

技术标签:

【中文标题】无法显示当前在 Swift 中播放的歌曲的标题?【英文标题】:Having trouble displaying title of song currently playing in Swift? 【发布时间】:2016-04-17 01:31:20 【问题描述】:

我让它工作了,但是当我选择要播放的歌曲时,歌曲的标题第一次没有出现。我必须返回媒体选择器并再次选择歌曲以显示歌曲的标题。为什么我第一次选择歌曲时它不起作用?另外,当我选择另一首歌曲播放时,如何删除歌曲的标题?谢谢!这是我的代码:

func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) 


if mediaItemCollection.items.count == 2
mediaPicker.dismissViewControllerAnimated(true, completion: nil)



let aMediaItem = mediaItemCollection.items[0] as MPMediaItem
music = aMediaItem
NSLog("\(aMediaItem.title)selected")

let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

    do 
        musicPlayer = try AVAudioPlayer(contentsOfURL: url)

     catch 

        return
    

        titleLabel2.text = music.title
        titleLabel2 = SKLabelNode(fontNamed: "TimeBurner")
        titleLabel2.fontColor = UIColor.whiteColor()
        titleLabel2.zPosition = 40
        titleLabel2.fontSize = 16
        titleLabel2.position = CGPointMake(self.size.width / 5.3, self.size.height / 1.2)
        addChild(titleLabel2)



    let aMediaItem2 = mediaItemCollection.items[1] as MPMediaItem
    music2 = aMediaItem2
    NSLog("\(aMediaItem2.title)selected")
    let url2: NSURL = (music2.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

    do 
        musicPlayer2 = try AVAudioPlayer(contentsOfURL: url2)

     catch 

        return
    

    titleLabel.text = music2.title
    titleLabel = SKLabelNode(fontNamed: "TimeBurner")
    titleLabel.fontColor = UIColor.whiteColor()
    titleLabel.zPosition = 40
    titleLabel.fontSize = 16
    titleLabel.position = CGPointMake(self.size.width / 1.3, self.size.height / 1.2)
    addChild(self.titleLabel)

    

【问题讨论】:

如果没有更多上下文很难判断,但您的问题可能是您需要将 UI 更新显式分派到主线程,因为 UI 驻留在主线程上。为此,您可以使用dispatch_async(dispatch_get_main_queue()) //perform UI updates here 将您的调用封装到任何与 UI 更改有关的内容。如果您不熟悉 Grand Central Dispatch,那么 here 是一个很棒的 Swift 教程 我通过调用 didMoveToView 中的标签并在选择歌曲后显示标题文本来使其工作。 @MikeG 你知道当用户选择另一首歌时如何删除标签吗?现在,如果我选择另一首歌曲,它只会与之前的歌曲名称重叠。 没关系,我让它工作了。 【参考方案1】:

这就是我如何让它工作的。我将标题标签添加到 didmovetoview 并将文本添加到 didPickMediaItems。

override func didMoveToView(view: SKView) 
titleLabel2 = SKLabelNode(fontNamed: "TimeBurner")
titleLabel2.fontColor = UIColor.whiteColor()
titleLabel2.zPosition = 40
titleLabel2.fontSize = 16
titleLabel2.position = CGPointMake(self.size.width / 6.0, self.size.height / 1.25)
addChild(titleLabel2)


titleLabel = SKLabelNode(fontNamed: "TimeBurner")
titleLabel.fontColor = UIColor.whiteColor()
titleLabel.zPosition = 40
titleLabel.fontSize = 16
titleLabel.position = CGPointMake(self.size.width / 1.2, self.size.height / 1.25)
addChild(self.titleLabel)




  func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) 


  if mediaItemCollection.items.count == 2
  mediaPicker.dismissViewControllerAnimated(true, completion: nil)

 let aMediaItem = mediaItemCollection.items[0] as MPMediaItem
 music = aMediaItem
 NSLog("\(aMediaItem.title)selected")

  let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as?    NSURL)!

do 
    musicPlayer = try AVAudioPlayer(contentsOfURL: url)

 catch 

    return


    titleLabel2.text = music.title



let aMediaItem2 = mediaItemCollection.items[1] as MPMediaItem
music2 = aMediaItem2
NSLog("\(aMediaItem2.title)selected")
let url2: NSURL = (music2.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

do 
    musicPlayer2 = try AVAudioPlayer(contentsOfURL: url2)

 catch 

    return


titleLabel.text = music2.title
addChild(self.titleLabel)



【讨论】:

以上是关于无法显示当前在 Swift 中播放的歌曲的标题?的主要内容,如果未能解决你的问题,请参考以下文章

swift,ios 12+中当前播放歌曲的MPMediaItem字段`lyrics`为空

swift版QQ音乐播放器

swift版QQ音乐播放器

swift版QQ音乐播放器

如何在 Python (Windows) 中获取 Spotify 当前正在播放的歌曲?

无法播放歌曲 Spotify SDK