iOS项目日志

首先上效果图

代码如下:

#import "DSNMusicTableViewController.h"

#import "DSNMusicModel.h"

#import "DSNPlayingViewController.h"

@interface DSNMusicTableViewController ()

@property (nonatomic,strong)NSArray *musics;

@end

@implementation DSNMusicTableViewController

-(NSArray *)musics

{

    if (!_musics) {

        NSString *path = [[NSBundle mainBundle]pathForResource:@"musics.plist" ofType:nil];

        NSArray *arr = [NSArray arrayWithContentsOfFile:path];

        

        

        NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:arr.count];

        for(NSDictionary *dic in arr){

            DSNMusicModel *model = [DSNMusicModel musicWithDic:dic];

            [arrM addObject:model];

        }

        _musics = [arrM copy];

    }

    return _musics;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    self.tableView.rowHeight = 80;

    // Uncomment the following line to preserve selection between presentations.

    // self.clearsSelectionOnViewWillAppear = NO;

    

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.

    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.musics.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *identifier = @"cell";

    

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    if (!cell) {

        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];

    }

    DSNMusicModel *model = self.musics[indexPath.row];

    cell.textLabel.text = model.singer;

    cell.detailTextLabel.text = model.name;

    

    

    cell.imageView.frame = CGRectMake(10, 0, 30, 30);

    cell.imageView.image = [UIImage imageNamed:model.singericon];

    cell.imageView.layer.masksToBounds = YES;

    cell.imageView.layer.cornerRadius = 40;

    cell.imageView.layer.borderColor = [UIColor greenColor].CGColor;

    cell.imageView.layer.borderWidth = 2;

    return cell;

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    DSNPlayingViewController *plaVC = [self.storyboard instantiateViewControllerWithIdentifier:@"playID"];

    [self.navigationController showViewController:plaVC sender:nil];

    

    DSNMusicModel *model = self.musics[indexPath.row];

    plaVC.icon = model.icon;

    plaVC.total = model.time;

    plaVC.name = model.name;

    plaVC.singer = model.singer;

}

#import "DSNPlayingViewController.h"

#import "DSNMusicModel.h"

#import <AVFoundation/AVFoundation.h>

@interface DSNPlayingViewController ()

@property (weak, nonatomic) IBOutlet UIButton *playButton;

@property (weak, nonatomic) IBOutlet UILabel *singerNameLabel;

@property (weak, nonatomic) IBOutlet UILabel *songNameLabel;

@property(nonatomic,strong)NSArray *musics;

@property (nonatomic,assign)int currentIndex;

@property (nonatomic,strong)AVAudioPlayer *player;

- (IBAction)playBTNClick:(UIButton *)sender;

@end

@implementation DSNPlayingViewController

{

    int flag;

    CADisplayLink *link ;

}

-(NSArray *)musics{

    if (!_musics) {

        NSString *path = [[NSBundle mainBundle]pathForResource:@"musics.plist" ofType:nil];

        NSArray *arr = [NSArray arrayWithContentsOfFile:path];

        

        NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:arr.count];

        for(NSDictionary *dic in arr){

            DSNMusicModel *model = [DSNMusicModel musicWithDic:dic];

            [arrM addObject:model];

        

        }

        _musics = [arrM copy];

    }

    return _musics;

}

- (IBAction)play {

//    CADisplayLink *link = nil;

    flag+=1;

    if (flag%2==1) {

        [self.player play];

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

            

            link = [CADisplayLink displayLinkWithTarget:self selector:@selector(transformCircle)];

            [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

            

            [UIView animateWithDuration:1.0 animations:^{

                

                self.playButton.transform = CGAffineTransformRotate(self.playButton.transform, M_PI_4);

                

            }];

        });

    }else if(flag %2 == 0){

        [self.player pause];

        [link invalidate];

        

        [UIView animateWithDuration:1.0 animations:^{

            self.playButton.transform = CGAffineTransformRotate(self.playButton.transform, -M_PI_4);

        }];

    }

}

- (IBAction)back {

    [self.player stop];

//    [link invalidate];

    self.currentIndex--;

    if (self.currentIndex == self.musics.count) {

        self.currentIndex = 0;

    }

    [self.player play];

}

- (IBAction)forward {

    [self.player stop];

    

    self.currentIndex ++;

    if (self.currentIndex == 0) {

        self.currentIndex = (int)self.musics.count;

    }

    [self.player stop];

}

- (void)viewDidLoad {

    [super viewDidLoad];

       NSURL *url = [[NSBundle mainBundle]URLForResource:self.name withExtension:@".mp3"];

    self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];

    self.currentIndex = 0;

    

    [self initSubviews];

    // Do any additional setup after loading the view.

}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    if ([segue.identifier isEqualToString:@"back"]) {

        [self.player stop];

    }

}

-(void)transformCircle{

    

    self.singerView.transform = CGAffineTransformRotate(self.singerView.transform, M_PI_2/100);

}

-(void)initSubviews

{

    self.singerView.layer.cornerRadius = 100;

    self.singerView.layer.masksToBounds = YES;

    self.singerView.layer.borderColor = [UIColor blackColor].CGColor;

    self.singerView.layer.borderWidth = 30;

    self.singerView.image = [UIImage imageNamed:self.icon];

    

    self.totalTime.text = self.total;

    self.singerNameLabel.text = self.singer;

    self.songNameLabel.text = self.name;

    

    self.playButton.transform = CGAffineTransformRotate(self.playButton.transform, -M_PI_4);

    

    NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(updatePro) userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop]addTimer:timer forMode:NSRunLoopCommonModes];

    

}

-(void)updatePro{

    

    NSString *xiaoshi= [self.total substringToIndex:1];

    NSString *fenzhong = [self.total substringToIndex:2];

    int t = [xiaoshi intValue] *60 + [fenzhong intValue];

    self.barProgress.progress = self.player.currentTime/t;

    

    int currentFenzhong = (int)self.player.currentTime % 60;

    int currentXiaoshi = (int)self.player.currentTime /60;

    self.currentTime.text = [NSString stringWithFormat:@"0%d:%d",currentXiaoshi,currentFenzhong];;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

-(instancetype)initWithDic:(NSDictionary *)dic

{

    if (self = [super init]) {

        [self setValuesForKeysWithDictionary:dic];

    }

    return self;

}

+(instancetype)musicWithDic:(NSDictionary *)dic

{

    return [[self alloc]initWithDic:dic];

}

原文地址:https://www.cnblogs.com/adodo/p/5231356.html