王涛的播放器

来源:互联网 发布:查询电脑8000端口号 编辑:程序博客网 时间:2024/04/29 12:43
昨天晚上做的音乐播放器忘了发博客,今天完善了一下,一起发上来总结一下吧。这两天做的音乐播放器,只有一个界面的内容,而且无法显示歌词,功能还有有欠缺,所以我在这方面跟时间比较长的同学还是比不上的。首先创一个Object文件,我还做了4个按键,开始/暂停、下一曲、上一曲、停止。然后做了几首歌曲连播,同时在点击下一曲的同时还有背景的转换。同时也发现了自己的两个问题,如果琼哥或珊哥看到了 求指教~第一个:我现在的代码自己能独立解决的很少,有些不懂的,然后看得久了就脑壳发晕,所以习惯去请教别人。我想问一下,如果想不通了,主动、时常请教别人,会不会导致我在以后的工作中有什么坏处第二个:写代码、查代码有很多技巧,但是我现在感觉跟不上,所以觉得时间很紧,顾得了这里,忘了那里,顾得了那里,忘了这里,有什么建议么废话不多说了,下面把我的代码列出来:#import "ViewController.h"#import <AVFoundation/AVFoundation.h>@interface ViewController (){    AVAudioPlayer *player;      int index;    int picIndex;    NSArray *musiclist;    NSArray *picturelist;        int flag;    NSTimer *timer;    UIButton *playBtn;    UILabel *label;    UIImageView *imageView;    //!!!! 全局变量与局部变量的差别,注意一些差点遗忘的问题:1,出现问题时,如果想学好需要立刻动笔,做下笔记。2,关于定义的问题,全局定义和局部定义的问题,有时候想不到不是我不知道,而是压根没往那处想,还是不熟悉,需要花时间额外疏通疏通。3,多多看代码,熟悉结构,看清全局,这样会对在一些前后定义、方法引用等等其他方面是会有好处的。4,我还是个菜鸟,革命道路很漫长~ 哈哈   }@property (weak, nonatomic) IBOutlet UISlider *progressSlide;@end@implementation ViewControllerint a=1;- (void)viewDidLoad{    [super viewDidLoad];    [self createBtn];        label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100,30)];    label.textColor = [UIColor colorWithRed:63/255.0 green:130/255.0 blue:139/255.0 alpha:0.7];    label.numberOfLines = 0;    [self.view addSubview:label];        imageView=[[UIImageView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];    imageView.image=[UIImage imageNamed:@"汽车背景"];    [self.view addSubview:imageView];    imageView.alpha=0.4;        picturelist = @[@"汽车背景",@"性感图片",@"男人"];    musiclist = @[@"平凡之路", @"Pretty",@"小情歌",@"我相信",@"Disneyland",@"少女时代 - Oh! 音乐中心20100313版"];    NSString *name=musiclist[index];    NSString *path=[[NSBundle mainBundle]pathForResource:name ofType:@"mp3"];    NSURL *url = [NSURL fileURLWithPath:path];    label.text=musiclist[index];    player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];    [player prepareToPlay];    [player play];        timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(refreshProgress) userInfo:nil repeats:YES];}-(void)createBtn{    playBtn = [self configuerButton:CGRectMake(115, 370, 80, 80) imageNamed:@"play.png" action:@selector(didplayed)];  // 这个东西解决了我一个疑惑, 就是全都封装以后,我怎么得到按钮的对象问题,1,先在interface处定义一下对象,然后将封装后,你想得到的,那个按键,用赋值给刚定义的对象。有时间多多看看,想清楚其中的奥妙。    [self configuerButton:CGRectMake(205, 400, 25, 25) imageNamed:@"next.png" action:@selector(didnexted)];    [self configuerButton:CGRectMake(80,400, 25, 25)  imageNamed:@"last.png" action:@selector(didlasted)];    [self configuerButton:CGRectMake(30, 400, 25, 25) imageNamed:@"stop.png" action:@selector(didstoped)];}-(UIButton *)configuerButton: (CGRect)frame imageNamed:(NSString *)imageNamed  action:(SEL)action{    // 这一段是封装。 函数名+“:”+参数名的结构,参数名可以看情况添加,另外如果有按键需要被对象使用的话,还需要去一个返回值。用“UIButton”做类。返回“btn”值    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];    btn.frame =frame;    btn.tintColor=[UIColor blackColor];    [btn setImage:[UIImage imageNamed:imageNamed] forState:UIControlStateNormal];    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];    [self.view addSubview:btn];    return btn;}-(void)didstoped{    [player stop];}-(void)didnexted{    picIndex++;    index++;    if(index==musiclist.count)    {        index = 0 ;    }    if (picIndex == picturelist.count)    {        picIndex = 0;    }     UIImage *image1 = [UIImage imageNamed:picturelist[picIndex]];    imageView.image = image1;    label.text=musiclist[index];    [timer invalidate];    [self didplayed];}上一段代码是“下一曲”的功能实现,由interface 定义了两个变量“index”“picIndex”来作为数组的变量。通过数组的逐个输出来得到我们对歌曲逐个更换的目的。由“1”遍历到“musiclist.count”和"picturelist.count"两个最大值来进行歌曲的连续播放。-(void)didlasted{    picIndex--;    index--;    if(index<0)    {        index = musiclist.count - 1;    }    if (picIndex<0)    {        picIndex = picturelist.count - 1;    }    UIImage *image = [UIImage imageNamed:picturelist[picIndex]];    imageView.image = image;    label.text=musiclist[index];    [timer invalidate];    [self didplayed];}上一段代码跟“下一曲”功能相同,可参照。-(void)didplayed{    flag+=1;    if(flag%2==1)    {        [player pause];       // [self->player play];        [playBtn setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];    }    else    {        [player prepareToPlay];        [playBtn setImage:[UIImage imageNamed:@"play"] forState:UIControlStateNormal];        [player play];            }}这个代码是在一个按键中实现“播放”和“暂停”的交替,点击一下是播放,在点击以下是暂停,如此可用一个判断语句来实现,其实很多语句不像我们想的那么难,多少还是有一点规律的,虽然我还只是在寻找。。。- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{    index++;    if(index==musiclist.count)    {        index = 0 ;    }    [timer invalidate];    [self didplayed];}这是一个列表循环的功能实现代码。index 逐一增加。直到它的最大值,然后再赋值 0 ,重新开始。- (void)refreshProgress{    self.progressSlide.value = player.currentTime / player.duration;}这段代码是一个进度条的取值公式:  播放器的当前播放时间 /  播放器的总时间。  得到一个大于0 小于1的 进度条值。- (IBAction)progress:(UISlider *)sender{    player.currentTime = sender.value * player.duration;        NSLog(@"progress: %f", player.currentTime);}这个代码是进度条当前播放了多少秒,是进度条取值 * 播放器的总时间; 得到音乐播放的时间。- (IBAction)volume:(UISlider *)sender{    player.volume = sender.value;}这个代码是音乐播放器的声音的调节,将进度条的值赋值给音量。通过比例还决定音量的大小。- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

0 0
原创粉丝点击