简单的音乐播放器
2016-02-21 16:21
295 查看
下面是代码 比较有意思的是红心的设置
(略过plist文件解析)
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UILabel *songName; @property (weak, nonatomic) IBOutlet UILabel *singerName; @property (weak, nonatomic) IBOutlet UIImageView *postImageView; @property (weak, nonatomic) IBOutlet UIView *upView; @property (weak, nonatomic) IBOutlet UIView *downView; @property (weak, nonatomic) IBOutlet UILabel *processLabel; @property (weak, nonatomic) IBOutlet UILabel *totalTime; @property (weak, nonatomic) IBOutlet UISlider *prcessSlisdr; @property (weak, nonatomic) IBOutlet UIButton *play; @property (weak, nonatomic) IBOutlet UIButton *favor; @end #import "ViewController.h" #import "ZQModel.h" #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVAudioPlayerDelegate> { NSMutableArray *musics;//存放歌曲信息的数组 NSString *totalTimeText;//总时长 int currentMusic;//当前播放的歌曲 BOOL isLove[100];//记录歌曲是否收藏 AVAudioPlayer *player;//播放器 NSTimer *myTimer;//定时器 } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self loadData]; } //使用这个方法打开就可以播放 - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self reloadData]; } - (void)creatPlayer{ //初始化播放器 int songName=[musics[currentMusic] musicID]; NSString *path=[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"%d",songName] ofType:@"mp3"]; NSURL *url=[NSURL fileURLWithPath:path]; player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil]; player.delegate=self; } //AVAudioPlayer代理方法 当音乐播放完毕调用此方法 (下一首) - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ if (currentMusic>=musics.count-1) { currentMusic=0; self.prcessSlisdr.value=0; }else{ currentMusic++; self.prcessSlisdr.value=0; } [self reloadData]; } - (void)reloadData{ //每首歌对应一个player 当更换歌曲的时候们需要新建一个player [self creatPlayer]; //设置每个视图的属性 NSString *imageName=[musics[currentMusic] musicImage]; self.postImageView.image=[UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]; self.songName.text=[musics[currentMusic] song]; self.singerName.text=[musics[currentMusic] singer]; //这里的duration是一个TimInterval 我们需要转化成正常看到的时分秒 self.totalTime.text=[NSString stringWithFormat:@"%d:%d:%d",(int)lround(floor(player.duration/3600.))%100,(int)lround(floor(player.duration/60.))%60,(int)lround(floor(player.duration))%60]; self.processLabel.text=[NSString stringWithFormat:@"%lf",[player currentTime]]; self.prcessSlisdr.value=player.currentTime/player.duration; //添加定时器 使slider做改变 myTimer=[NSTimer scheduledTimerWithTimeInterval:.2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES]; [player play]; //切换歌曲 切换play按钮的状态 self.play.selected=YES; //切换歌曲显示当前歌曲是否收藏 self.favor.selected=isLove[currentMusic]; } - (void)loadData{ //解析plist文件 NSString *path=[[NSBundle mainBundle]pathForResource:@"music" ofType:@"plist"]; NSArray *array=[NSArray arrayWithContentsOfFile:path]; //千万别忘了可变数组的初始化 musics=[NSMutableArray array]; for (NSDictionary *dic in array) { ZQModel *model=[[ZQModel alloc]init]; model.song=[dic objectForKey:@"song"]; model.singer=[dic objectForKey:@"singer"]; model.musicID=[[dic objectForKey:@"url"] intValue]; model.musicImage=[dic objectForKey:@"image"]; [musics addObject:model]; } } - (IBAction)backAction:(UIButton *)sender { } - (IBAction)favorAction:(UIButton *)sender { //把是否收藏添加到BOOL数组中 isLove[currentMusic]=!isLove[currentMusic]; sender.selected=isLove[currentMusic]; } - (IBAction)playAction:(UIButton *)sender { sender.selected=!sender.selected; if (!sender.selected) { [player pause]; [myTimer invalidate]; myTimer=nil; return; } //NSTimer没有暂停 每次停止就需要重新创建一个 myTimer=[NSTimer scheduledTimerWithTimeInterval:.2 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES]; [player play]; } - (void)timerAction:(NSTimer *)timer{ //让slider的value跟着时间变动 if (self.prcessSlisdr.value<1) { self.processLabel.text=[NSString stringWithFormat:@"%d:%d:%d",(int)lround(floor(player.currentTime/3600.))%100,(int)lround(floor(player.currentTime/60.))%60,(int)lround(floor(player.currentTime))%60]; self.prcessSlisdr.value=player.currentTime/player.duration; }else{ //当时间到头了 关闭定时器 并消灭它 [timer invalidate]; timer=nil; } } - (IBAction)lastSongAction:(UIButton *)sender { //上一首 if (currentMusic<=0) { currentMusic=(int)musics.count-1; self.prcessSlisdr.value=0; }else{ currentMusic=currentMusic-1; self.prcessSlisdr.value=0; } [self reloadData]; } - (IBAction)nextAction:(UIButton *)sender { if (currentMusic>=musics.count-1) { currentMusic=0; self.prcessSlisdr.value=0; }else{ currentMusic++; self.prcessSlisdr.value=0; } [self reloadData]; } - (IBAction)processSlider:(UISlider *)sender { player.currentTime=sender.value*player.duration; } - (IBAction)hidden:(UIButton *)sender { //点击屏幕中间 上下两个View消失 self.upView.hidden=!self.upView.hidden; self.downView.hidden=!self.downView.hidden; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
相关文章推荐
- WP8 电话本编程
- 51 nod 1181 质数中的质数(质数筛法)
- Android问题集(八)——
- PowerDNS简单教程(1):安装篇
- 面向对象之多态
- 循环结构(while语句)
- ZOJ-3202-Second-price Auction【6th浙江省赛】
- Jq中event.target 与this的区别
- JAVA简单的zip文档 文件读取例子
- Jquery map()与get()
- 解决Android ListView数据为空及加载错误的方法
- MyEclipse10--Cannot return from outside a function or method
- vc模拟鼠标操作
- CentOS 修改系统语言的方法
- AndoidStudio中module移除不了
- 批量建立用户和设置密码,批量删除用户脚本
- SlidingMenu重写HorizontalScrollView实现菜单侧滑的效果
- 窥探算法之美妙——寻找数组中最小的K个数&python中巧用最大堆
- Windows phone8 获取本机 IP 地址
- Machine Learning - Regularized Logistic Regression