2014-06-23 3 views
0

내 프로젝트에서 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의 로딩 시간을 줄이는 방법이 있습니까? 업로드 버튼을 클릭 한 후 지연되는 것은 정말 나쁜 사용자 환경입니다.

+0

을 통지합니다. 말 그대로 탐색 스택에 푸시 될 때까지 아무 것도로드하지 않습니다. – holex

답변

1

할 수 있는게 없습니다. 많은 음악이 있다면, 그것을 모두 조사하고 컨트롤러를 준비하는 데 시간이 걸리며, 그게 전부입니다. 이것은 사용자가 처음으로 뮤직 앱을 사용하려고 시도 할 때와 차이가 없습니다. showsCloudItems을 끄면 표시되는 재료의 양을 줄일 수 있지만 도움이되지 않을 수도 있습니다.

당신이 할 수있는 최선의 방법은 지연 시간 을 심리적으로으로 커버하는 것입니다. 즉, 회전하는 활동 표시기와 같이 사용자에게 무엇인가를 보여줄 수 있습니다. 그러나 MPMediaPickerController를 사용하여이 작업을 시도하지는 않았습니다 (동일한 지연 문제가있는 자체 제작 뮤직 라이브러리 탐색 인터페이스로 수행했습니다).

0

매트가 제안했듯이 회전 작동 표시기는 실제로 작동하고 있어도 충돌을 일으키지 않았 음을 사용자에게 확신시켜주기 때문에 사용자 경험을 실제로 도울 수 있습니다. 음악 라이브러리에서 트랙을로드 할 때 이것을 위해 MBProgressHUD을 사용했습니다.

1

내 MediaPickerController가 매우 느립니다 (내 현재 프로젝트에서 Swift 2.2 사용). 프로젝트에서 이전 버전과 (네트워킹 코드를 추가 한 이후의 대부분) 상당히 빠름에도 불구하고.

내 코드에서 사용자가 "노래 찾기"버튼을 누를 때만 MPMediaPickerController를 인스턴스화했습니다. 메인 뷰 로딩시에 MPMediaPickerController의 인스턴스를 생성함으로써 (필자는 클래스 선언, viewDidLoad 외부에 위치 시켰습니다), 어떻게 든로드 시간을 1 초 미만으로 줄일 수있었습니다 (때때로 마지막 순간에 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) 
    } 
} 

: (그것은을가`MPMediaPickerController`이 좋은 메모리 시민 내 버튼을 탭되면 난 단지 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) 
    } 
} 
관련 문제