标签:
该项目需要使用MediaPlayer框架,因此程序需要先为该项目添加MediaPalyer框架,并在上面控制器类的实现部分使用#import<MediaPlayer/MediaPlayer.h>导入该框架的头文件
程序清单:
@interface FKViewController ()<MPMediaPickerControllerDelegate>{ MPMediaPickerController* mpc; MPMusicPlayerController* musicPlayer; MPMediaItemCollection * itemList; } @end @implementation FKViewController - (void)viewDidLoad { [super viewDidLoad]; NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); NSLog(@"path=%@",paths[0]); UIBarButtonItem * bn = [[UIBarButtonItem alloc]initWithTitle:@"选择音乐" style:UIBarButtonItemStylePlain target:self action:@selector(choose:)]; self.navigationItem.rightBarButtonItem = bn; //创建音乐播放器 musicPlayer = [MPMusicPlayerController systemMusicPlayer]; //创建mpmediapickercontroller 对象 mpc = [[MPMediaPickerController alloc]initWithMediaTypes:MPMediaTypeAnyAudio]; //创建mpMediapickercontroller设置委托 mpc.delegate = self; //设置选择音乐的提示文字 mpc.prompt = @"请选择您喜欢的音乐"; //设置是否允许多选 mpc.allowsPickingMultipleItems = YES; //设置是否允许选择云端音乐 mpc.showsCloudItems = YES; } -(void)choose:(id)sender{ //必须以modal方式显示mpmusicplayercontroller视图控制器 [self presentViewController:mpc animated:YES completion:nil]; } //当用户选择指定音乐时激发该方法,mediaItemcolllection代表用户选择的音乐 -(void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{ //保存用户选择的音乐列表 itemList = mediaItemCollection; //将用户选择的音乐列表设置为musicplayer的播放列表 [musicPlayer setQueueWithItemCollection:mediaItemCollection]; [self.tableView reloadData]; [mpc dismissViewControllerAnimated:YES completion:nil]; } -(void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{ NSLog(@"用户取消了选择"); [mpc dismissViewControllerAnimated:YES completion:nil]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark UITableViewDAtaSource和UITableViewDatagate的代理方法 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return itemList.count; } -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSUInteger rowNo = indexPath.row; static NSString * cellId = @"cellId"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (!cell) { cell = [[UITableViewCell alloc]initWithStyle:0 reuseIdentifier:cellId]; } cell.textLabel.text = [itemList.items[rowNo] valueForKeyPath:MPMediaItemPropertyTitle]; return cell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //获取表格行的行号 NSUInteger rowNo = indexPath.row; //设置播放器正要播放的音乐 musicPlayer.nowPlayingItem = [itemList.items objectAtIndex:rowNo]; //开始播放 [musicPlayer play]; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 44; }
上面程序中的第1行粗体字代码创建了MPMusicPlayerController对象,该对象将会复制播放音乐,接下来程序创建了MPMediaPixkerController对象,并为该对象设置了相应的属性,该对象将负责选择音乐.
上面的视图控制器类实现了MPMediaPickerControllerDelegate协议,并实现了该协议中的两个方法,尤其是mediaPicker:idPickMediaItems:方法,当用户选择多首音乐时将会激发该方法.该方法保存了用户选择的多首音乐,并将用户选择的音乐作为MPMusicPlayerController的播放列表.该程序还实现了UITableViewDAtaSource和UITableViewDatagate的方法,这样即可通过表格显示用户选的音乐,并控制用户选择指定表格行时播放响应的音乐.
标签:
原文地址:http://www.cnblogs.com/sixindev/p/4489853.html