iOS 简易音乐播放界面

来源:互联网 发布:电脑有趣的软件 编辑:程序博客网 时间:2024/06/15 18:51

/***原计划写一个音视频媒体全部支持的播放器,目前出于需求,只做了音乐(.MP3)的播放,后续视频及其他媒体类型播放会补上.***/



自定义音乐播放界面,实现以下三个功能:

1.根据URL读取并播放音乐文件(.MP3)

2.通过UISlider展示当前进度

3.手动滑动Slider的滑块能定位到实际进度并从实际进度开始播放


先上效果图:












代码如下:

//声明文件

JakMediaPlayerViewController.h:

////  JakMediaPlayerViewController.h////  Created by zyh on 16/8/4.//  Copyright © 2016年 HC. All rights reserved.//#import <UIKit/UIKit.h>#import <AVFoundation/AVFoundation.h>@interface JakMediaPlayerViewController : UIViewController@end

//实现文件

JakMediaPlayerViewController.m:

////  JakMediaPlayerViewController.m////  Created by zyh on 16/8/4.//  Copyright © 2016年 HC. All rights reserved.//#import "JakMediaPlayerViewController.h"#import "Define.h"@interface JakMediaPlayerViewController ()<AVAudioPlayerDelegate>@property(nonatomic,strong)AVAudioPlayer *musicPlayer;@property(nonatomic,strong)UIButton *playAndPauseBtn ;@property(nonatomic,strong)UISlider *playProgress;@property(nonatomic,strong)UILabel *currentLabel;@property(nonatomic,strong)NSTimer *timer;//定时器用来控制播放进度@property(nonatomic)BOOL isPlaying;//用来判断播放状态@end@implementation JakMediaPlayerViewController- (void)viewDidLoad {    [super viewDidLoad];    NSURL *url = [NSURL URLWithString:@"xxxxx"];    self.musicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];    self.musicPlayer.delegate = self;    [self.musicPlayer prepareToPlay];    //显示文件名称    UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, MY_WIDTH+40 , MY_WIDTH, 30)];    nameLabel.textAlignment = NSTextAlignmentCenter;    nameLabel.font = [UIFont systemFontOfSize:23];    nameLabel.text = @"xxxx";    [self.view addSubview:nameLabel];    //显示进度    self.playProgress = [[UISlider alloc]initWithFrame:CGRectMake(40, MY_HEIGHT - 150, MY_WIDTH - 80, 30)];    self.playProgress.value = 0.0;    [self.playProgress addTarget:self action:@selector(valueChanged) forControlEvents:UIControlEventValueChanged];    self.playProgress.maximumTrackTintColor = [UIColor lightGrayColor];    [self.view addSubview:self.playProgress];        //显示当前已播放时间    self.currentLabel = [[UILabel alloc]initWithFrame:CGRectMake(20, MY_HEIGHT - 110, 40, 20)];    self.currentLabel.textAlignment = NSTextAlignmentCenter;    self.currentLabel.text =[self getMinuteSecondWithTime:self.musicPlayer.currentTime];    [self.view addSubview:self.currentLabel];    //显示音乐文件总时间    UILabel * totalLabel = [[UILabel alloc]initWithFrame:CGRectMake(MY_WIDTH-60, MY_HEIGHT - 110, 40, 20)];    totalLabel.textAlignment = NSTextAlignmentCenter;    totalLabel.text =[self getMinuteSecondWithTime:self.musicPlayer.duration];    [self.view addSubview:totalLabel];        //设置播放/暂停按钮    self.playAndPauseBtn = [[UIButton alloc]initWithFrame:CGRectMake(MY_WIDTH/2-25, MY_HEIGHT - 80, 50, 50)];    [self.playAndPauseBtn addTarget:self action:@selector(playAndPauseBtnTouched) forControlEvents:UIControlEventTouchUpInside];    [self.playAndPauseBtn setImage:[UIImage imageNamed:@"player_button_play"] forState:UIControlStateNormal];    [self.view addSubview:self.playAndPauseBtn];    }-(void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];//    [self.musicPlayer play];}-(void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    self.isPlaying = NO;    [self.musicPlayer stop];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}//播放时调用,进度条更新当前进度,当前时间标签更新当前时间-(void)playedMusic{    self.playProgress.value = self.musicPlayer.currentTime/self.musicPlayer.duration;    self.currentLabel.text = [self getMinuteSecondWithTime:self.musicPlayer.currentTime];}//手动拖动进度条的时候调用-(void)valueChanged{   self.musicPlayer.currentTime  = self.playProgress.value *self.musicPlayer.duration;    self.isPlaying = NO;    [self playAndPauseBtnTouched];}//点击播放/暂停 按钮时调用-(void)playAndPauseBtnTouched{    self.isPlaying = !self.isPlaying;    if (self.isPlaying) {        [self.playAndPauseBtn setImage:[UIImage imageNamed:@"player_button_stop"] forState:UIControlStateNormal];        [self.musicPlayer play];        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(playedMusic) userInfo:nil repeats:YES];    }else{        [self.playAndPauseBtn setImage:[UIImage imageNamed:@"player_button_play"] forState:UIControlStateNormal];        [self.musicPlayer pause];        [self.timer invalidate];    }}//通过获取时间展示"分钟:秒钟"-(NSString *)getMinuteSecondWithTime:(NSTimeInterval)time{        int minute = (int)time / 60;    int second = (int)time % 60;        if (second > 9) {        return [NSString stringWithFormat:@"%d:%d",minute,second];    }    return [NSString stringWithFormat:@"%d:0%d",minute,second];}//代理方法,播放结束后调用#pragma mark -- AVAudioPlayerDelegate- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{    [self playAndPauseBtnTouched];}@end


尚有不足,欢迎指正.大笑





1 0