你的位置:首页 > 操作系统

[操作系统]【代码笔记】仿QQ空间,歌曲播放


一,效果图。

二,工程图。

三,代码。

RootViewController.h

复制代码
#import <UIKit/UIKit.h>#import <AVFoundation/AVFoundation.h>@interface RootViewController : UIViewController<AVAudioPlayerDelegate>{  //存放歌曲数组  NSMutableArray *musicArray;  //名字所在的label  UILabel * musicNameLabel;  //播放器  AVAudioPlayer * _player;  //进度后的背景色  UIView * overLayView;  //声音控制  UISlider * volumeSlider;  //歌曲进度  UISlider * progressSlider;  //语音所在的灰色背景  UIView * functionView;  //前一首按钮  UIButton * prevButton;  //播放按钮  UIButton * playButton;  //下一首按钮  UIButton * nextButton;  //重播按钮  UIButton * repeatButton;  //歌曲播放的时间  UILabel *startTime;  //歌曲剩下的时间  UILabel * currentTime;    //存放歌曲在数组中的当前位置  NSInteger currentIndex;  NSTimer *timer;    //图片框以及里面的图片  UIView *transitionView;  //灰色的图  UIImageView * borderView;  //中间的空间图片  UIView * middleView;  }@end
复制代码

 

RootViewController.m

复制代码
#import "RootViewController.h"@interface RootViewController ()@end@implementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  if (self) {    // Custom initialization  }  return self;}- (void)viewDidLoad{  [super viewDidLoad];    self.navigationController.navigationBarHidden=YES;    //歌曲所在的数组  musicArray=[[NSMutableArray alloc] initWithObjects:@"一眼万年",@"中国话", @"夜曲",@"三寸天堂",nil];    //设置背景色  UIImage *image=[UIImage imageNamed:@"audio_bg.png"];  self.view.backgroundColor =[UIColor colorWithPatternImage:image];      //显示歌曲的名字  UIView *navView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];  navView.backgroundColor=[UIColor clearColor];  navView.alpha=0.9;  [self.view addSubview:navView];    //歌曲的名字所在的label  musicNameLabel=[[UILabel alloc] initWithFrame:CGRectMake(80, 0, 160, 44)];  musicNameLabel.backgroundColor=[UIColor clearColor];  musicNameLabel.textColor=[UIColor blackColor];  musicNameLabel.text = [musicArray objectAtIndex:0];  musicNameLabel.font=[UIFont boldSystemFontOfSize:12];  musicNameLabel.textAlignment=NSTextAlignmentCenter;  [navView addSubview:musicNameLabel];    //歌曲的地址  NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[musicArray objectAtIndex:0] ofType:@"mp3"]];    _player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];  //准备播放,先提前把缓存准备好.  [_player prepareToPlay];  //开启变速功能  _player.enableRate = YES;  _player.delegate = self;  [self playerViewInit];  }#pragma -mark -functions//设置播放器的画面的排版-(void)playerViewInit{  //进度后的背景色  overLayView=[[UIView alloc] initWithFrame:CGRectMake(0.0f, 44.0f, 320.0f, 80.0f)];  overLayView.backgroundColor=[UIColor colorWithWhite:0.1f alpha:0.2f];  overLayView.hidden=NO;  [self.view addSubview:overLayView];    //声音调节  volumeSlider=[[UISlider alloc]initWithFrame:CGRectMake(20.0f, 20.0f, 250.0f, 30.0f)];  volumeSlider.backgroundColor=[UIColor clearColor];  [volumeSlider setThumbImage:[UIImage imageNamed:@"com_thumb_max_h.png"] forState:UIControlStateNormal];  [volumeSlider setMinimumTrackImage:[[UIImage imageNamed:@"com_slider_min_l.png"]stretchableImageWithLeftCapWidth:10 topCapHeight:0] forState:UIControlStateNormal];  volumeSlider.alpha=0.6f;  volumeSlider.minimumValue=0.0f;  volumeSlider.maximumValue=1.0f;  volumeSlider.value=0.2f;  [volumeSlider addTarget:self action:@selector(doClickChangeVolume) forControlEvents:UIControlEventValueChanged];  volumeSlider.minimumValueImage=[UIImage imageNamed:@"cell_radio_speaker.png"];    [overLayView addSubview:volumeSlider];  _player.volume = volumeSlider.value;        //语音后的黑色按钮  functionView=[[UIView alloc]initWithFrame:CGRectMake(0, 460-90, 320, 90)] ;  functionView.backgroundColor=[UIColor colorWithWhite:0.1f alpha:0.2f];  [self.view addSubview:functionView];    //前一首按钮  prevButton=[UIButton buttonWithType:UIButtonTypeCustom];  prevButton.frame=CGRectMake(50, 10.0f, 40.0f, 40.0f);  [prevButton setImage:[UIImage imageNamed:@"audio_btn_pre_h.png"] forState:UIControlStateNormal];  [prevButton setImage:[UIImage imageNamed:@"audio_btn_pre_n.png"] forState:UIControlStateHighlighted];  [prevButton addTarget:self action:@selector(doClickPrevButton:) forControlEvents:UIControlEventTouchUpInside];  [functionView addSubview:prevButton];    //播放按钮  playButton=[UIButton buttonWithType:UIButtonTypeCustom];  playButton.frame=CGRectMake(140, 10.0f, 40.0f, 40.0f);  playButton.tag = 10;  [playButton setImage:[UIImage imageNamed:@"audio_btn_play_h.png"] forState:UIControlStateNormal];  [playButton addTarget:self action:@selector(doClickPlayButton:) forControlEvents:UIControlEventTouchUpInside];  [functionView addSubview:playButton];   //后一首按钮  nextButton=[UIButton buttonWithType:UIButtonTypeCustom];  nextButton.frame=CGRectMake(230.0f, 10.0f, 40.0f, 40.0f);  [nextButton setImage:[UIImage imageNamed:@"audio_btn_next_h.png"] forState:UIControlStateNormal];  [nextButton setImage:[UIImage imageNamed:@"audio_btn_next_n.png"] forState:UIControlStateHighlighted];  [nextButton addTarget:self action:@selector(doClickNextButton:) forControlEvents:UIControlEventTouchUpInside];  [functionView addSubview:nextButton];    //音量控制条  progressSlider =[[UISlider alloc]initWithFrame:CGRectMake(50.0f, 55.0f, 230.0f, 20.0f)];  progressSlider.minimumValue=0.0f;  progressSlider.maximumValue=1.0f;  progressSlider.backgroundColor=[UIColor clearColor];  [progressSlider setThumbImage:[UIImage imageNamed:@"com_thumb_max_h.png"] forState:UIControlStateNormal];  [progressSlider setMinimumTrackImage:[[UIImage imageNamed:@"com_slider_min_l.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0]forState:UIControlStateNormal];  [progressSlider addTarget:self action:@selector(doClickProgressButton) forControlEvents:UIControlEventValueChanged];  [functionView addSubview:progressSlider];      //重复按钮  repeatButton=[UIButton buttonWithType:UIButtonTypeCustom];  repeatButton.frame=CGRectMake(5.0f, 20.0f, 30.0, 30.0f);  repeatButton.tag=20;  [repeatButton setImage:[UIImage imageNamed:@"audio_btn_random_h.png"] forState:UIControlStateNormal];  [repeatButton addTarget:self action:@selector(doClickRepeatButton:) forControlEvents:UIControlEventTouchUpInside];  [functionView addSubview:repeatButton];    //开始播放时间  startTime=[[UILabel alloc] initWithFrame:CGRectMake(10.0f, 50.0f, 40.0f, 30.0)];  startTime.backgroundColor=[UIColor clearColor];  startTime.text=[NSString stringWithFormat:@"%02d:%02d",0,0];  startTime.textColor=[UIColor whiteColor];  startTime.font=[UIFont systemFontOfSize:13.0f];  [functionView addSubview:startTime];    //歌曲当前的剩下的时间  currentTime=[[UILabel alloc]initWithFrame:CGRectMake(285.0f, 50.0f, 40.0f, 30.0f)];  currentTime.backgroundColor=[UIColor clearColor];  currentTime.text=[NSString stringWithFormat:@"%02d:%02d",0,0];  currentTime.font=[UIFont systemFontOfSize:13.0f];  currentTime.textColor=[UIColor whiteColor];  [functionView addSubview:currentTime];    //中间的空间背景图  transitionView=[[UIView alloc] initWithFrame:CGRectMake(0, 88, 320, 416-90-44)];  [self.view addSubview:transitionView];   //边框  borderView=[[UIImageView alloc]initWithFrame:CGRectMake(60.0f, 90.0f-44.0f, 200.0f, 200.0f)];  borderView.image=[UIImage imageNamed:@"audio_cover_bg.png"];  borderView.tag=200;  transitionView.userInteractionEnabled=YES;  [transitionView addSubview:borderView];    //空间图  middleView=[[UIView alloc]initWithFrame:CGRectMake(15.0f, 15.0f, 170.0f, 170.0f)];  middleView.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"audio_album_default.png"]];  middleView.alpha=1.0f;  middleView.tag=201;  [borderView addSubview:middleView];     UITapGestureRecognizer *tapGes=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGes)];  [transitionView addGestureRecognizer:tapGes];}#pragma -mark -AVAudioPlayerDelegate-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{  currentIndex++;  if (currentIndex == musicArray.count) {    currentIndex = 0;  }    [self loadMusic:[musicArray objectAtIndex:currentIndex] type:@"mp3"];  musicNameLabel.text = [musicArray objectAtIndex:currentIndex];  [_player play];}#pragma -mark -functions-(void)loadMusic:(NSString*)name type:(NSString*)type{  NSString* path= [[NSBundle mainBundle] pathForResource: name ofType:type];    NSURL* url = [NSURL fileURLWithPath:path];    _player= [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];  _player.delegate=self;  _player.volume= volumeSlider.value;  [_player prepareToPlay];  }#pragma -mark -doClickActions//点击背景图的时候,歌曲进度所在的部分隐藏-(void)tapGes{  if (overLayView.hidden == YES) {    overLayView.hidden = NO;  }else{    overLayView.hidden = YES;  }}//声音播放的条-(void)doClickProgressButton{  _player.volume = volumeSlider.value; }//前一首歌曲-(void)doClickPrevButton:(UIButton *)sender{  BOOL playFlag;  if (_player.playing) {    playFlag = YES;    [_player stop];  }else{    playFlag = NO;  }  currentIndex--;  if (currentIndex < 0) {    currentIndex =musicArray.count - 1;  }  [self loadMusic:[musicArray objectAtIndex:currentIndex] type:@"mp3"];  musicNameLabel.text = [musicArray objectAtIndex:currentIndex];  if (playFlag == YES) {    [_player play];  }}//刷新进度条-(void)refresh{  progressSlider.value = _player.currentTime/_player.duration;  startTime.text =  [NSString stringWithFormat:@"%02d:%02d",(int)_player.currentTime/60,(int)_player.currentTime%60];  currentTime.text = [NSString stringWithFormat:@"%d:%02d",(int)(_player.duration-_player.currentTime)/60,(int)(_player.duration-_player.currentTime)%60];}//播放按钮-(void)doClickPlayButton:(UIButton *)sender{  if (_player.playing) {    [_player pause];    [playButton setImage:[UIImage imageNamed:@"audio_btn_play_h.png"] forState:UIControlStateNormal];    [timer invalidate];  }else{    [_player play];    [playButton setImage:[UIImage imageNamed:@"audio_btn_pause_h.png"] forState:UIControlStateNormal];    //更新下进度条    timer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(refresh) userInfo:nil repeats:YES];  }}//下一首按钮-(void)doClickNextButton:(UIButton *)sender{  BOOL playFlag;  if (_player.playing) {    playFlag = YES;    [_player stop];  }else{    playFlag = NO;  }  currentIndex++;  if (currentIndex == musicArray.count) {    currentIndex = 0;  }  [self loadMusic:[musicArray objectAtIndex:currentIndex] type:@"mp3"];    musicNameLabel.text = [musicArray objectAtIndex:currentIndex];    if (playFlag == YES) {    [_player play];  }  }//重复按钮-(void)doClickRepeatButton:(UIButton *)sender{  ;}//进度按钮-(void)doClickChangeVolume{  _player.currentTime = _player.duration *progressSlider.value;}@end
复制代码