**
我使用AvPlayer写的,所以大家一定得记住要导入AvFoundation的库,话不多说,直接上代码
**
这里我是把AvPlayer封装到了一个类里,
//
// CXPlayMvViewController.m
// LeeMusic
//
// Created by ChuXiang on 15/12/9.
// Copyright © 2015年 ChuXiang. All rights reserved.
//
#import "LoveMusicPlayer.h"
#import <AVFoundation/AVFoundation.h>
@implementation LoveMusicPlayer
+ (LoveMusicPlayer *)sharePlayer{
static LoveMusicPlayer* Player = nil;
if (Player==nil) {
Player =[[LoveMusicPlayer alloc] init];
}
return Player;
}
- (void)playWithURL:(NSString *)url{
AVPlayerItem * item = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:url]];
[self replaceCurrentItemWithPlayerItem: item];
[self play];
}
@end
这里是在ViewController里完成的代码,我是直接找了一个音乐播放器的歌单的Url然后在这里请求数据的。
其实做起来也没那么难,AvPlayer它本身就有很多方法供大家使用,比如从url中获取歌曲总长(不过大家它给的时间是以秒为单位的,大家别忘了把它化成分秒,下面我也写到,大家可以参考),比如播放器音量,直接跟你写的音量slider绑定到一起等等。大家可以慢慢看,先把页面铺完(歌曲的图片转动我为了偷工减料就直接用计时器写了,看起来有点Low),再把该完成的方法写了就完事了。
//
// ViewController.m
// PlayMusic
//
// Created by ChuXiang on 16/1/3.
// Copyright © 2016年 ChuXiang. All rights reserved.
//
#import "ViewController.h"
#import "LoveMusicPlayer.h"
#import "CXSingListModel.h"
#import <AVFoundation/AVFoundation.h>
#import "UIImageView+WebCache.h"
#import "CXNetWorkTool.h"
#define kWidth ([UIScreen mainScreen].bounds.size.width / 375)
#define kHeight ([UIScreen mainScreen].bounds.size.height / 667)
#define kControlBarHeight 300
#define kControlBarCenterY (kScreenHeight - 150)
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define kControlBarOriginY (kScreenHeight - kControlBarHeight)
#define kMusicInfoOriginY (kControlBarOriginY + 40)
#define kControlBarCenterX self.view.center.x
#define kControlBarCenterY (kScreenHeight - 150)
#define kButtonOffsetX 120
#define kFindMusicGetURL @"http://a.vip.migu.cn/rdp2/v5.5/index.do?ua=Iphone_Sst&version=4.2421&pageno=1"
@interface ViewController () <UIScrollViewDelegate>
//处理音乐数据
@property (nonatomic, copy) NSString *songId;
@property (nonatomic, retain) NSMutableArray *myArr;
@property (nonatomic, assign) NSInteger index;
@property (nonatomic, strong) CXSingListModel *model;
// 播放器
@property (nonatomic, retain) LoveMusicPlayer *player;
@property (nonatomic, assign) BOOL isPlaying;
//播放列表属性
@property (nonatomic, retain) UIImageView *myImageView;
@property (nonatomic, retain) UIButton *playButton;
@property (nonatomic, retain) UILabel *authorSongLabel;
@property (nonatomic, retain) UILabel *songNameLabel;
@property (nonatomic, retain) UISlider *slider;
@property (nonatomic, retain) NSTimer *timer;
@property (nonatomic, retain) NSTimer *imgTimer;
@property (nonatomic, retain) UIImageView *backImage;
@property (nonatomic, retain) UILabel *timeLable;
@property (nonatomic, retain) UILabel *currentTimeLable;
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) UISlider *volumeSlider;
//判断播放状态
@property (nonatomic, assign) NSInteger type;
//播放状态的枚举
typedef NS_ENUM(NSUInteger, PlayType) {
PlayTypeLive = 0,
PlayTypeNext,
PlayTypeLast
};
@end
@implementation ViewController
static ViewController *single = nil;
// 单例执行 只初始化一次
+ (instancetype) shareSingleViewController {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 在多线程中保证只初始化一次
single = [[ViewController alloc] init];
});
return single;
}
//网络请求数据
- (void)getWithUrl:(NSString *)url parameter:(NSDictionary *)parameter withKey:(NSString *)key WithValue:(NSString *)value{
self.myArr = [NSMutableArray arrayWithCapacity:0];
[CXNetWorkTool getWithUrl:url parameter:nil httpHeader:nil responseType:ResponseTypeJSON success:^(id result) {
if (result) {
NSDictionary *dic = result;
NSArray *array = dic[@"groups"];
NSDictionary *dic1 = array[3];
NSArray *array1 = dic1[@"songs"];
for (NSDictionary *dic in array1) {
CXSingListModel *model = [[CXSingListModel alloc] initWithDictionary:dic];
[self.myArr addObject:model];
}
dispatch_async(dispatch_get_main_queue(), ^{
[self createMusicData];
});
}
}
fail:^(NSError *error) {
// NSLog(@"%@", error);
}];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self getWithUrl:kFindMusicGetURL parameter:nil withKey:nil WithValue:nil];
self.view.backgroundColor = [UIColor whiteColor];
// 播放背景图片
self.backImage = [[UIImageView alloc] initWithFrame:self.view.frame];
// 上部分高亮显示
UIBlurEffect *blur = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *effectview = [[UIVisualEffectView alloc] initWithEffect:blur];
effectview.frame = CGRectMake(0, 0, self.backImage.frame