在我的项目中,我使用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的加载时间吗?在点击upload按钮之后的这种延迟确实是一个糟糕的用户体验。
发布于 2014-06-24 01:23:22
你什么也做不了。如果有很多音乐,则需要时间来检查所有音乐并准备控制器,这就是全部内容。这与用户首次尝试使用音乐应用程序时的延迟没有什么不同。您也许可以通过禁用showsCloudItems来减少显示的材质数量,但即使这样也可能没有帮助。
你能做的最好的事情可能就是尝试从心理上掩盖延迟,比如让用户看到一些东西,比如旋转的活动指示器,直到一切就绪。然而,我还没有用MPMediaPickerController尝试过这一点(我已经用我自己的音乐库探索界面做到了这一点,它也有同样的延迟问题)。
发布于 2016-03-08 04:40:53
我注意到我的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)
}
}发布于 2015-03-31 00:16:17
正如matt建议的那样,旋转活动指示器真的可以帮助用户体验,因为它让用户放心,它正在工作,并且没有崩溃。当我从音乐库加载一首曲目时,我使用了MBProgressHUD。
https://stackoverflow.com/questions/24367734
复制相似问题