2016-04-26 5 views
0

Мне нужно условное заявление, чтобы я мог выбрать песню для одного 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 

} 
} 
+0

Вы говорите об этом условном утверждении, если mediaItemCollection.items.count == 2 { } Неясно, хотите ли вы иметь две кнопки или одну кнопку. –

+0

Хорошо, что условное утверждение позволяет мне выбрать две песни для моих «avplayers» с одной кнопки. Я хочу использовать две кнопки и выбирать по одной песне. – coding22

+0

Можете ли вы показать небольшой поток, как вы используете одну кнопку, чтобы выбрать две песни, то есть имя функции, которая вызывается, когда вы нажимаете на эту кнопку (код, который работает при нажатии кнопки), прежде чем открывать средство выбора медиа. Я не совсем получаю node.name == «addmusictoright» thingy. Как ваш mediaItemCollection.items.count == 2 возвращается true, вы одновременно открываете оба медиа-сборщика при нажатии этой кнопки. –

ответ

2

Мы можем сделать это намного чище и лучше с помощью 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 для компиляции, поскольку я не запускал его в компиляторе. Надеюсь, это сработает!

+0

Dont Мне нужно добавить код player2 в didPickMediaItems? – coding22

+0

Вам нужен один игрок за раз? Я только что изменил предыдущий код на лучшую версию, никакая логика не нарушена. –

+0

Он отлично работает! – coding22

0

Хорошо, так что я, наконец, получил его на работу здесь, как я это сделал:

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() 

} 
    }