iOS 简易音乐播放界面

/***原计划写一个音视频媒体全部支持的播放器,目前出于需求,只做了音乐(.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


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





  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值