zoukankan      html  css  js  c++  java
  • 使用MediaPlayer框架实现简单音乐播放器-陈棚

    该项目需要使用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的方法,这样即可通过表格显示用户选的音乐,并控制用户选择指定表格行时播放响应的音乐.

  • 相关阅读:
    Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合 前端javascript数组,后端接受
    jquery each循环遍历完再执行的方法 因为each是异步的 所以要加计数器.
    分布式中的一些概念,分布式简单理解,分布式架构的常见概念
    href="#"与href="javascript:void(0)"的区别
    Newtonsoft.Json高级用法DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET即Newtonsoft.Json datatable,dataset,modle,序列化
    Newtonsoft.Json高级用法,json序列号,model反序列化,支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity,字符串
    C#利用反射实现两个类的对象之间相同属性的值的复制,一个对象的属性复制给另一个对性的属性
    指定文件兼容性模式 < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />的意义
    使用 IIS 在 Windows 上托管 ASP.NET Core2.0
    jQuery.data() 的实现方式,jQuery16018518865841457738的由来,jQuery后边一串数字的由来
  • 原文地址:https://www.cnblogs.com/sixindev/p/4489853.html
Copyright © 2011-2022 走看看