【问题标题】:How would I make a conditional statement for my mediaPickers?我如何为我的 mediaPickers 做一个条件语句?
【发布时间】:2016-04-26 18:01:34
【问题描述】:

我需要一个条件语句,以便我可以为一个 avplayer 选择一首歌曲,并为我的另一个 avplayer 选择另一首歌曲。我有两个按钮可以打开 mediaPicker 为每个 avplayer 选择一首歌曲。我目前的代码有效,但用户必须为avplayers 选择两首歌曲,而我宁愿使用两个按钮。这是我目前的代码:

if node.name == "addmusictoright" {
            mediaPicker2 = MPMediaPickerController(mediaTypes: .AnyAudio)

            if let picker = mediaPicker2{

                print("Successfully open media picker Left")
                picker.delegate = self
                picker.allowsPickingMultipleItems = true
                picker.showsCloudItems = false
                picker.prompt = "Please pick one song!"
                self.view?.window?.rootViewController!.presentViewController(picker, animated: true, completion: nil)

            } else {
                print("PICKER WONT OPEN")
}



if node.name == "addmusictoleft" {
            mediaPicker = MPMediaPickerController(mediaTypes: .AnyAudio)

            if let picker2 = mediaPicker{

                print("Successfully open media picker Left")
                picker2.delegate = self
                picker2.allowsPickingMultipleItems = true
                picker2.showsCloudItems = false
                picker2.prompt = "Please pick one song!"
                self.view?.window?.rootViewController!.presentViewController(picker2, animated: true, completion: nil)

            } else {
                print("PICKER WONT OPEN")
}




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

if mediaItemCollection.items.count == 2{

       let aMediaItem = mediaItemCollection.items[0] as MPMediaItem
       music = aMediaItem
       NSLog("\(aMediaItem.title)selected")
       let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

        player =  AVPlayer(URL: url)
        titleLabel2.text = music.albumArtist



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

    player2 =  AVPlayer(URL: url2)
    titleLabel.text = music2.albumArtist

}
}

【问题讨论】:

  • 你是在说这个条件语句 if mediaItemCollection.items.count == 2{ } 不清楚你想要两个按钮还是只有一个按钮。
  • 嗯,条件语句允许我从一个按钮为我的avplayers 选择两首歌曲。我想要的是使用两个按钮并分别选择一首歌曲。
  • 您能否展示一些流程,您如何使用单个按钮来选择两首歌曲,即单击该按钮时调用的函数名称是什么(在按钮单击时运行的代码)在打开媒体选择器之前。我不太明白 node.name == "addmusictoright" 东西。您的 mediaItemCollection.items.count == 2 如何返回 true ,您是否在单击该按钮时同时打开两个媒体选择器。
  • 好的,所以我目前使用一个按钮打开 mediaPicker,用户为 avplayers 选择两首歌曲。我想要的是使用两个按钮,这就是我包含addmusictorightaddmusictoleft 的原因。例如,我想按下一个按钮,它会打开 mediaPicker 并为 avplayer and I then press on another button to open the mediapicker and select another song for the other avplayer. The node.name == "addmusictoright"` 代码之一选择一首歌曲,这样我就可以将我的节点变成一个按钮。
  • @SouravSachdeva 你明白我想要完成的事情吗?

标签: ios xcode swift swift2 mpmediapickercontroller


【解决方案1】:

正确地使用enums,我们可以做得更干净、更好:

public enum NodeType: String {
   case right = "addmusictoright"
   case left = "addmusictoleft"

   func mediaPicker() -> (one: Bool, two: Bool, side: String) {
      switch self {
      case .right:
         return (one: false, two: true, side: "right")
      case .left:
         return (one: true, two: false, side: "left")
      }
   }
}

class GameScene: SKScene, MPMediaPickerControllerDelegate, AVAudioPlayerDelegate {
   var isMediaPickerOne = false
   var isMediaPickerTwo = false
   let nodeType = NodeType(rawValue: node.name)!

   mediaPicker = MPMediaPickerController(mediaTypes: .AnyAudio)

   if let picker = mediaPicker {

      isMediaPickerOne = nodeType.mediaPicker.one
      isMediaPickerTwo = nodeType.mediaPicker.two

      print("Successfully open media picker \(nodeType.mediaPicker.sode)")
      picker.delegate = self
      picker.allowsPickingMultipleItems = false
      picker.showsCloudItems = false
      picker.prompt = "Please pick one song!"
      self.view?.window?.rootViewController!.presentViewController(picker, animated: true, completion: nil)
   } else {
      print("PICKER WONT OPEN")
   }

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

      isMediaPickerOne ? isMediaPickerTwo = !isMediaPickerOne: isMediaPickerOne = !isMediaPickerTwo

      let aMediaItem = mediaItemCollection.items[0] as MPMediaItem
      music = aMediaItem
      NSLog("\(aMediaItem.title)selected")
      let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

      player = AVPlayer(URL: url)
      player.pause()
   }

这将重构问题中添加的大量重复代码。这段代码可能需要一些 lil 修复才能编译,因为我没有在编译器上运行它。 希望它会奏效!

【讨论】:

  • 我不需要将 player2 代码添加到 didPickMediaItems 中吗?
  • 您一次只需要一个播放器,对吗?我刚刚将以前的代码更改为更好的版本,没有逻辑受到干扰。
【解决方案2】:

好的,所以我终于让它工作了,我就是这样做的:

class GameScene: SKScene, MPMediaPickerControllerDelegate, AVAudioPlayerDelegate {
var isMediaPickerOne = false
var isMediaPickerTwo = false

if node.name == "addmusictoright" {
        mediaPicker2 = MPMediaPickerController(mediaTypes: .AnyAudio)

        if let picker = mediaPicker2{

           isMediaPickerTwo = true
           isMediaPickerOne = false

            print("Successfully open media picker Left")
            picker.delegate = self
            picker.allowsPickingMultipleItems = false
            picker.showsCloudItems = false
            picker.prompt = "Please pick one song!"
            self.view?.window?.rootViewController!.presentViewController(picker, animated: true, completion: nil)

        } else {
            print("PICKER WONT OPEN")
}



 if node.name == "addmusictoleft" {
        mediaPicker = MPMediaPickerController(mediaTypes: .AnyAudio)

        if let picker2 = mediaPicker{

                isMediaPickerOne = true
                isMediaPickerTwo = false


            print("Successfully open media picker Left")
            picker2.delegate = self
            picker2.allowsPickingMultipleItems = false
            picker2.showsCloudItems = false
            picker2.prompt = "Please pick one song!"
            self.view?.window?.rootViewController!.presentViewController(picker2, animated: true, completion: nil)

        } else {
            print("PICKER WONT OPEN")
}




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

if isMediaPickerOne {
isMediaPickerTwo = false


let aMediaItem = mediaItemCollection.items[0] as MPMediaItem
music = aMediaItem
NSLog("\(aMediaItem.title)selected")
let url: NSURL = (music.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!

player =  AVPlayer(URL: url)
player.pause()
}




if isMediaPickerTwo {
isMediaPickerOne = false

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

player2 =  AVPlayer(URL: url2)
player2.pause()

}
   }

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多