아래 코드로 라이브러리 선택 컨트롤러 그리기.
//PickerController 객체 가져오기.
let controller = MPMediaPickerController(mediaTypes: .music)
//여러 아이템 선택여부 세팅.
controller.allowsPickingMultipleItems = true
// ?? 뭘까...
controller.popoverPresentationController?.sourceView = sender
//delegate 세팅
controller.delegate = self
//Picker 실행
present(controller, animated: true)
item 선택이 완료되었을 경우(멀티건이 아니면 item 선택 시, 멀티건이면 상단 완료 터치 시)
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
//item을 선택했을 떄
// Get the system music player.
//
//MusicPlayer 가져오기.
let musicPlayer = MPMusicPlayerController.systemMusicPlayer
//선택한 item 세팅하기.
musicPlayer.setQueue(with: mediaItemCollection)
//Picker 닫기.
mediaPicker.dismiss(animated: true)
// Begin playback.
//음악앱을 통해서 음악 실행.(background 실행)
musicPlayer.play()
}
Music App Library -> MPMusicPlayerApplicationController : 앱에서 컨트롤됨
Music App Library -> MPMusicPlayerController.systemMusicPlayer : 시스템 음악 플레이어(음악 앱)로 컨트롤됨. Local File 읽는방법?? 몰라(없는것 같은데...).
Local Music File -> AVAudioPlayer : 앱에서 컨트롤. 뭔가 세세한 컨트롤이 가능한걸로 보임.
** 숙제. 현재로써는 Music App Library와 Local Music File의 플레이어를 각각 다른 클래스를 사용해야하는걸로 보임. 근데 두가지 클래스에서 제공하는 기능이 많이 차이가 나는걸로 보여서...Music App Library를 AVAudioPlayer에서 재생하는 방법을 찾아봐야 할 듯. 우선순위는 아님.
재생 시 슬라이더 바 이동 및 임의 이동 시 해당 구간부터 재생실행
기본적으로 재생바 이동은 다른것과 동일하게 구현.(MaxValue 설정, 기본값 설정, Item 선태되지 않았을 경우 비활성화, Timer시작과 함께 selector에서 실시간 슬라이드바 이동 처리)
문제는 슬라이더를 이동시키기 위해 슬라이더바 터치 시 실시간 슬라이드바 이동을 해제하고, 이동 후 터치를 끝낸 위치부터 재생하면서 바로 슬라이드바 이동 시작.
1) 터치 시 이벤트 : Touch Down
2) 터치에서 손을 떌 시 이벤트 : Touch Up Inside
** 필수 구현 기능
아래 코드로 라이브러리 선택 컨트롤러 그리기. //PickerController 객체 가져오기. let controller = MPMediaPickerController(mediaTypes: .music) //여러 아이템 선택여부 세팅. controller.allowsPickingMultipleItems = true // ?? 뭘까... controller.popoverPresentationController?.sourceView = sender //delegate 세팅 controller.delegate = self //Picker 실행 present(controller, animated: true)
item 선택이 완료되었을 경우(멀티건이 아니면 item 선택 시, 멀티건이면 상단 완료 터치 시) func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { //item을 선택했을 떄 // Get the system music player. //
//MusicPlayer 가져오기. let musicPlayer = MPMusicPlayerController.systemMusicPlayer //선택한 item 세팅하기. musicPlayer.setQueue(with: mediaItemCollection) //Picker 닫기. mediaPicker.dismiss(animated: true) // Begin playback. //음악앱을 통해서 음악 실행.(background 실행) musicPlayer.play() }
취소버튼 눌렀을 때. func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) { //Picker 닫기. mediaPicker.dismiss(animated: true) }