如何减少MPMediaPickerController的加载时间?

时间:2014-06-23 13:51:53

标签: ios mpmediapickercontroller

在我的项目中,我使用MPMediaPickerController从设备音乐库中选择一个文件。我正在使用以下代码来显示媒体选择器。

     MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic];
     mediaPicker.delegate = self;
     mediaPicker.prompt = @"Select a personal message";

     [self presentViewController:mediaPicker animated:NO completion:nil];

一切正常,但MediaPickerController花了几秒钟(2到3秒)来显示音乐库。有没有办法减少MPMediaPickerController的加载时间。点击上传按钮后的这种延迟确实是一种糟糕的用户体验。

3 个答案:

答案 0 :(得分:1)

你无能为力。如果有很多音乐,那么需要花费一些时间来调查所有音乐并准备控制器,这就是它的全部内容。这与用户第一次尝试使用音乐应用时的延迟没有什么不同。您可以通过关闭showsCloudItems来减少显示的素材数量,但即使这样也可能无济于事。

你能做的最好的事情可能就是试图弥补心理上的延迟,即给用户一些东西,比如旋转活动指示器,直到一切都到位。我没有尝试使用MPMediaPickerController,但是(我已经使用我自己的自制音乐库探索界面完成了它,它具有相同的延迟问题)。

答案 1 :(得分:1)

我注意到我的MediaPickerController也非常慢(在我当前的项目中,使用Swift 2.2),尽管它在项目早期很快(而且我之后添加的大部分内容都是网络代码)。

在我的代码中,我只是在用户点击我的"找到一首歌时才实例化MPMediaPickerController"按钮。通过在主视图加载时创建MPMediaPickerController的实例(我把它放在我的类声明中,在viewDidLoad之外),我(不知何故)能够将加载时间缩短到不到一秒钟(有时它当我在最后一秒钟实例化MPMediaPickerController时,甚至没有显示出来。

TLDR:写下这个:

import UIKit
import MediaPlayer
import MobileCoreServices

class SomeViewController: UIViewController, MPMediaPickerControllerDelegate {

    var mediaPickerController = MPMediaPickerController(mediaTypes: .AnyAudio)

    func viewDidLoad() {
        mediaPickerController.delegate = self
        mediaPickerController.prompt = "Select a song that you like"
    }

    @IBAction func buttonWasTapped(sender: AnyObject) {
        self.presentViewController(mediaPickerController, animated: true, completion: nil)
    }
}

而不是:(注意我的按钮被点击后我只会实例化mediaPickerController。

import UIKit
import MediaPlayer
import MobileCoreServices

class SomeViewController: UIViewController, MPMediaPickerControllerDelegate {


    func viewDidLoad() {

    }

    @IBAction func buttonWasTapped(sender: AnyObject) {
        var mediaPickerController = MPMediaPickerController(mediaTypes: .AnyAudio)
            mediaPickerController.delegate = self
            mediaPickerController.prompt = "Select a song that you like"
        self.presentViewController(mediaPickerController, animated: true, completion: nil)
    }
}

答案 2 :(得分:0)

正如亚特逊所说,旋转活动指示器可以真正帮助用户体验,因为它向用户保证它正在工作并且没有崩溃。从音乐库加载曲目时,我使用了MBProgressHUD