在我的项目中,我使用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的加载时间。点击上传按钮后的这种延迟确实是一种糟糕的用户体验。
答案 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。