Средство выбора мультимедиа ios показывает только белый экран / зависание

Итак, в настоящее время я делаю музыкальное приложение для своего проекта, и оно позволяет пользователю создавать свой собственный музыкальный плейлист. Однако, когда я нажимал кнопку выбора мультимедиа, отображался только белый экран, этого не происходит, когда представление, содержащее средство выбора мультимедиа, является Контроллером начального представления< /сильный>. Но когда я перехожу от перехода к этому контроллеру представления средства выбора мультимедиа, он показывает только белый экран, если я нажал кнопку.

вот код из моего контроллера представления медиа-сборщика:

var myMusicPlayer: MPMusicPlayerController?

override func viewDidLoad() {
    super.viewDidLoad()

    var buttonPickAndPlay = UIButton.buttonWithType(.System) as? UIButton

    if let pickAndPlay = buttonPickAndPlay{

        pickAndPlay.frame = CGRect(x: 0, y: 0, width: 200, height: 37)
        pickAndPlay.center = CGPoint(x: view.center.x, y: view.center.y - 50)
        pickAndPlay.setTitle("Pick and Play", forState: .Normal)
        pickAndPlay.addTarget(self,
            action: "displayMediaPickerAndPlayItem",
            forControlEvents: .TouchUpInside)

        view.addSubview(pickAndPlay)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func displayMediaPickerAndPlayItem(){

    var mediaPicker = MPMediaPickerController(mediaTypes: .AnyAudio)

    if let picker = mediaPicker{

        println("Successfully instantiated a media picker")
        picker.delegate = self
        picker.allowsPickingMultipleItems = true
        picker.showsCloudItems = true
        picker.prompt = "Pick a song please..."
        self.view.addSubview(picker.view)
        presentViewController(picker, animated: true, completion: nil)
    } else {
        println("Could not instantiate a media picker")
    }

}

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

        println("Media Picker returned")

        /* Instantiate the music player */

       myMusicPlayer = MPMusicPlayerController()

        if let player = myMusicPlayer{
            player.beginGeneratingPlaybackNotifications()

            /* Get notified when the state of the playback changes */
            NSNotificationCenter.defaultCenter().addObserver(self,
                selector: "musicPlayerStateChanged:",
                name: MPMusicPlayerControllerPlaybackStateDidChangeNotification,
                object: nil)

            /* Get notified when the playback moves from one item
            to the other. In this recipe, we are only going to allow
            our user to pick one music file */
            NSNotificationCenter.defaultCenter().addObserver(self,
                selector: "nowPlayingItemIsChanged:",
                name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification,
                object: nil)

            /* And also get notified when the volume of the
            music player is changed */
            NSNotificationCenter.defaultCenter().addObserver(self,
                selector: "volumeIsChanged:",
                name: MPMusicPlayerControllerVolumeDidChangeNotification,
                object: nil)

            /* Start playing the items in the collection */
            player.setQueueWithItemCollection(mediaItemCollection)
            User.mdci = mediaItemCollection
            player.play()

            /* Finally dismiss the media picker controller */
            mediaPicker.dismissViewControllerAnimated(true, completion: nil)

        }



}

person Ega Setya Putra    schedule 01.06.2015    source источник
comment
Почему self.view.addSubview(picker.view)?   -  person Larme    schedule 01.06.2015
comment
Что вы предлагаете? он отлично работает, когда контроллер представления является начальным.   -  person Ega Setya Putra    schedule 01.06.2015
comment
Я не понимаю, почему вы добавляете picker.view в качестве подпредставления, когда вы должны показать его, только выполнив presentViewController().   -  person Larme    schedule 01.06.2015
comment
@Larme Я думал, это было то же самое.   -  person Ega Setya Putra    schedule 01.06.2015
comment
@Larme, и это виновник: D   -  person Ega Setya Putra    schedule 01.06.2015


Ответы (2)


MPMediaPickerController – это UIViewController.
Так что не показывайте его на экране с currentViewController.view.addSubview(picker.view).

Когда вы показываете это с помощью presentViewController(picker, animated: true, completion: nil), это правильный путь.

В методах делегата, когда вы вызывали mediaPicker.dismissViewControllerAnimated(true, completion: nil), у вас все еще было mediaPicker.view в качестве подвида currentViewController.view.

person Larme    schedule 01.06.2015

Добавьте конфиденциальность в Info.Plist, чтобы решить эту проблему.

person Huu Phong Nguyen    schedule 26.08.2017