2016-04-17 11 views
-1

私はそれが動作するようになったが、私が曲のタイトルを再生するように選択すると、その曲のタイトルは初めて表示されません。私はメディアピッカーに戻って、歌のタイトルを表示するために曲をもう一度選択する必要があります。最初に曲を選んだのはなぜですか?また、別の曲を選んで再生するときに、曲のタイトルを削除するにはどうすればよいですか?ありがとうございました!ここに私が持っているコードはあります:現在Swiftで再生中の曲のタイトルを表示するのに問題がありますか?

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) 

    } 
} 
+0

UIがメインスレッドに存在するため、より多くのコンテキストを伝えるのは難しいですが、メインスレッドにUI更新を明示的にディスパッチする必要があることがあります。これを行うには、 'dispatch_async(dispatch_get_main_queue()){//ここでUIアップデートを実行する}'でUIの変更に関する呼び出しをラップします。あなたがGrand Central Dispatchに精通していない場合は、[ここ](https://www.raywenderlich.com/79149/grand-central-dispatch-tutorial-swift-part-1)は素早いチュートリアルです – MikeG

+0

私はそれを動作させましたdidMoveToViewのラベルを呼び出し、曲を選択した後にタイトルのテキストを表示することによって、 – coding22

+0

@MikeGユーザーが別の曲を選択したときにラベルを削除する方法を知っていますか?今すぐ別の曲を選択すると、前の曲のタイトルと重なるだけです。 – coding22

答えて

0

私はそれが働くようになった。私は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) 

} 
} 
関連する問題