MainViewController.m
属性等
#import "MainViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "SecondViewController1.h"
#define WIDTH self.view.frame.size.width
#define HEIGHT self.view.frame.size.height
@interface MainViewController ()<SecondViewControllerDelegate>
//添加背景用的ImageView
@property (retain, nonatomic) UIImageView *backView;
//播放进度条
@property (retain, nonatomic) UIProgressView *progress;
@property (retain, nonatomic) UISlider *prog;
//选项卡按钮,赋值播放和暂停
@property (retain, nonatomic) UISegmentedControl * segment;
//选项卡按钮,控制上一曲下一曲
@property (retain, nonatomic) UISegmentedControl *segment1;
//slider,用滑动器来设置音量的大小
@property (retain, nonatomic) UISlider *slider;
//timer,来更新歌曲的当前时间
@property (retain, nonatomic) NSTimer *timer;
//显示时间的lable
@property (retain, nonatomic) UILabel *label;
//加入图片,中间的图片
@property (retain, nonatomic) UIImageView *imageView;
//声明播放器,来播放我们的音频文件
@property (retain, nonatomic) AVAudioPlayer *player;
// 静音开关
@property(nonatomic,retain)UISwitch *swich;
@property(nonatomic,assign)BOOL isOn;
@property(nonatomic,assign)float voiceNum;
@property(nonatomic,retain)NSMutableArray *array;
@property(nonatomic,assign)NSInteger musicNum;
@property(nonatomic,assign)NSInteger num;
//在暂停和播放时回调此按钮
-(void)tapSegment:(UISegmentedControl *)seg;
//更新歌曲时间
-(void)time;
//改变声音大小
-(void) changeVo;
@end
release
@implementation MainViewController
-(void)dealloc
{
[_array release];
[_backView release];
[_progress release];
[_prog release];
[_segment release];
[_slider release];
[_timer release];
[_label release];
[_imageView release];
[_player release];
[_swich release];
[super dealloc];
}
初始化
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self create];
}
return self;
}
- (void)create
{
for (int i = 1; i < 10; i++) {
NSString * str = [NSString stringWithFormat:@"m%d", i];
NSString *path=[[NSBundle mainBundle] pathForResource:str ofType:@"mp3"];
[self.array addObject:path];
}
}
viewDidLoad
self.navigationController.navigationBar.translucent=NO;
//播放列表
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"播放列表" style:UIBarButtonItemStylePlain target:self action:@selector(itemAction:)];
self.navigationItem.rightBarButtonItem=item;
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.array[self.musicNum]] error:nil];
/*添加背景图片*/
self.backView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
self.backView.image = [UIImage imageNamed:@"33.jpg"];
[self.view insertSubview:self.backView atIndex:0];
[self.backView release];
/*实例化进度条,并添加到主视图*/
// self.progress = [[UIProgressView alloc] initWithFrame:CGRectMake(30, 60, 300, 10)];
// [self.view addSubview:self.progress];
// self.progress.progress = 0;
self.prog=[[UISlider alloc]initWithFrame:CGRectMake(30, 40, 300, 10)];
[self.view addSubview:self.prog];
[self.prog release];
self.prog.minimumValue = 0.0;
[self.prog addTarget:self action:@selector(progActoin:) forControlEvents:UIControlEventValueChanged ];
[self.prog setThumbImage:[UIImage imageNamed:@"xin.png"] forState:UIControlStateNormal];
//添加中间的图片
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 150, 160, 170)];
UIImage *image = [UIImage imageNamed:@"44.jpg"];
self.imageView.image = image;
[self.view addSubview:self.imageView];
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(timeAction) userInfo:nil repeats:YES];
[self.imageView release];
//
//添加segmentControl
self.segment = [[UISegmentedControl alloc] initWithItems:@[@"Play", @"Pause"]];
self.segment.frame = CGRectMake(50, 450, 250, 50);
self.segment.tintColor = [UIColor whiteColor];
//注册回调方法,在segment的值改变的时候回调注册的方法
[self.segment addTarget:self action:@selector(tapSegment:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.segment];
[self.segment release];
// 歌曲控制button
UIButton *buttonNextMusic = [UIButton buttonWithType:UIButtonTypeSystem];
buttonNextMusic.frame = CGRectMake(175, 400, 125, 30);
[buttonNextMusic setTitle:@"下一首" forState:UIControlStateNormal];
buttonNextMusic.layer.borderWidth = 1;
[buttonNextMusic addTarget:self action:@selector(buttonNextMusicAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:buttonNextMusic];
UIButton *buttonLateMusic = [UIButton buttonWithType:UIButtonTypeSystem];
buttonLateMusic.frame = CGRectMake(50, 400, 125, 30);
[buttonLateMusic setTitle:@"上一首" forState:UIControlStateNormal];
buttonLateMusic.layer.borderWidth = 1;
[buttonLateMusic addTarget:self action:@selector(buttonLateMusicAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:buttonLateMusic];
// 循环控制button
UIButton *circulateButton = [UIButton buttonWithType:UIButtonTypeCustom];
circulateButton.frame=CGRectMake(0, 420, 30, 30);
[circulateButton setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
[circulateButton addTarget:self action:@selector(changeState:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:circulateButton];
//设置时间,每一秒钟调用一次绑定的方法 监控
self.timer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(time) userInfo:nil repeats:YES];
//添加声音slider
self.slider = [[UISlider alloc] initWithFrame:CGRectMake(100,540, 250 , 50)];
self.slider.thumbTintColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"6.jpg"]];
[self.slider addTarget:self action:@selector(changeVo) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.slider];
//设置slider最小值和最大值
self.slider.minimumValue = 0;
self.slider.maximumValue = 7;
[self.slider release];
//声音开关控件 静音
self.swich=[[UISwitch alloc]initWithFrame:CGRectMake(10, 550, 60, 30)];
[self.swich addTarget:self action:@selector(onOrOff:) forControlEvents:UIControlEventValueChanged];
self.swich.on=YES;
[self.view addSubview:self.swich];
[self.swich release];
self.isOn=YES;
//把时间显示在lable上
self.label=[[UILabel alloc]initWithFrame:CGRectMake(130, 70, 100, 20)];
self.label.layer.borderWidth=1;
self.label.layer.cornerRadius=7;
self.label.layer.masksToBounds=YES;
self.label.textAlignment=NSTextAlignmentCenter;
[self.view addSubview:self.label];
[self.label release];
}
实现方法
// 图片旋转
-(void)timeAction
{
self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, 0.05);
}
// 进度条显示
-(void)progActoin:(UISlider *)prog
{
self.player.currentTime = prog.value;
}
// 声音开关
-(void)onOrOff:(UISwitch *)s
{
if (self.isOn) {
self.slider.value = 0;
self.player.volume = 0;
} else {
self.slider.value = self.voiceNum;
self.player.volume = self.voiceNum;
}
self.isOn = !self.isOn;
}
//改变声音
-(void)changeVo
{
if (!self.isOn) {
self.player.volume = 0;
} else {
self.player.volume = self.slider.value;
self.voiceNum = self.player.volume;
}
}
//更新时间
-(void) time
{
//获取音频的总时间
NSTimeInterval totalTime = self.player.duration;
//获取音频的当前时间
NSTimeInterval currentTime = self.player.currentTime;
//根据时间比设置进度条的进度
self.progress.progress = (currentTime/totalTime);
//把秒转换成分钟
NSTimeInterval currentM = currentTime/60;
currentTime = (int)currentTime%60;
NSTimeInterval totalM = totalTime/60;
totalTime = (int)totalTime%60;
NSString *timeString2 = [NSString stringWithFormat:@"%02.0f:%02.0f|%02.0f:%02.0f",currentM, currentTime, totalM,totalTime];
self.label.text = timeString2;
self.prog.value = self.player.currentTime;
self.prog.maximumValue = self.player.duration;
}
//segment所回调的方法
-(void) tapSegment:(UISegmentedControl *)seg
{
if (seg.selectedSegmentIndex==0)
{
[self.player play];
}
else if(seg.selectedSegmentIndex==1)
{
[self.player pause];
}
// self.prog.maximumValue = self.player.duration;
}
//下一曲button
-(void)buttonNextMusicAction
{
[self.player release];
self.musicNum = (self.musicNum + 1) % 9;
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.array[self.musicNum]] error:nil];
self.prog.maximumValue = self.player.duration;
[self.player play];
}
//上一曲button
-(void)buttonLateMusicAction
{
[self.player release];
self.musicNum = (self.musicNum + 8) % 9;
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.array[self.musicNum]] error:nil];
self.prog.maximumValue = self.player.duration;
[self.player play];
}
-(void)changeState:(UIButton *)button
{
if (self.isOn) {
[button setImage:[UIImage imageNamed:@"1.png"] forState:UIControlStateNormal];
self.num=1;
}
else{
[button setImage:[UIImage imageNamed:@"2.png"] forState:UIControlStateNormal];
self.num=2;
}
self.isOn=!self.isOn;
}
// 协议方法 在歌曲菜单中选中的歌曲 能够在此播放
- (void)changeMusic:(NSInteger)number
{
self.musicNum = number;
[self.player release];
self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.array[self.musicNum]] error:nil];
self.prog.maximumValue = self.player.duration;
[self.player play];
}
// 跳入歌曲菜单 传值 在菜单中能够使正在播放的歌曲名变色
- (void)itemAction:(UIButton *)button
{
SecondViewController1 *secondVC = [[SecondViewController1 alloc] init];
[self.navigationController pushViewController:secondVC animated:YES];
secondVC.musicNum = self.musicNum;
secondVC.delegate = self;
}
SecondViewController1.h
#import <UIKit/UIKit.h>
//声明协议
@protocol SecondViewControllerDelegate <NSObject>
-(void)changeMusic:(NSInteger)number;
@end
@interface SecondViewController1 : UIViewController
//代理人属性
@property(nonatomic,assign)id<SecondViewControllerDelegate>delegate;
@property(nonatomic,assign)NSInteger musicNum;
@end
SecondViewController1.m
#import "SecondViewController1.h"
@interface SecondViewController1 ()<UITableViewDelegate,UITableViewDataSource>
@property(nonatomic,retain)NSMutableArray *musicArr;
@property(nonatomic,retain)UITableView *tableView;
@property(nonatomic,retain)NSMutableArray *picArr;
@end
@implementation SecondViewController1
-(void)dealloc
{
[_picArr release];
[_musicArr release];
[_tableView release];
[super dealloc];
}
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.musicArr = [NSMutableArray arrayWithObjects:@"手掌心-丁当", @"미쳤어-孙丹菲,Eric", @"幻听-张在仁", @"Botty Music-Deep Side", @"夜", @"Teen Top - 긴 생머리 그녀 (Miss Right)", @"The Downtown Fiction - I Just Wanna Run", @"Teen Top - To You", @"Teen Top - 장난아냐 (Rocking)", nil];
self.picArr=[NSMutableArray arrayWithObjects:[UIImage imageNamed:@"1.jpg"],[UIImage imageNamed:@"2.jpg"],[UIImage imageNamed:@"3.jpg"],[UIImage imageNamed:@"4.jpg"],[UIImage imageNamed:@"5.jpg"],[UIImage imageNamed:@"6.jpg"],[UIImage imageNamed:@"7.jpg"],[UIImage imageNamed:@"8.jpg"],[UIImage imageNamed:@"9.jpg"], nil];
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 导航设置
self.view.backgroundColor = [UIColor whiteColor];
self.navigationController.navigationBar.translucent = NO;
self.title = @"播放列表";
// tableView 创建
self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 375, self.view.frame.size.height - 64) style:UITableViewStyleGrouped];
self.tableView.backgroundColor = [UIColor colorWithRed:0.5 green:0.2 blue:0.2 alpha:0.3 ];
[self.view addSubview:self.tableView];
self.tableView.rowHeight = 100;
// 签订协议
self.tableView.delegate = self;
self.tableView.dataSource = self;
}
// 索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9" ];
}
// 区数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.musicArr.count;
}
// 行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
// cell创建
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *reuse = @"reuse";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuse];
if (!cell) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuse] autorelease];
}
cell.textLabel.text = self.musicArr[indexPath.section];
cell.imageView.image=self.picArr[indexPath.section];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%ld", indexPath.section + 1];
// 防止在滑动时,未选中的歌曲也变色,对颜色初始化
cell.textLabel.textColor = [UIColor blackColor];
// 通过 上一层传过来的 self.musicNum 使当前播放歌曲变色
if (indexPath.section == self.musicNum) {
cell.textLabel.textColor = [UIColor redColor];
}
return cell;
}
// 返回上一层
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.navigationController popToRootViewControllerAnimated:YES];
[self.delegate changeMusic:indexPath.section];
}