音乐播放器项目技术之一正在播放按钮点击

一.效果图:

  实现功能:在"正在播放"按钮时,切换到下一个界面并继续原歌曲的播放进度

二.实现方法及步骤

   1.思路: 第一步.点击按钮事件中再show到下一个界面的时候,推出到我们创建的那个单例视图(前面已将第二个界面视图创建为单例对象)中

           第二步.在点击页面播放的时候,如果当前播放为第四首歌曲,show的也是第四首的话,就不需要从头播放,继续当前位置播放即可,如果是下一首的话则需要从头播放(想清楚这个逻辑判断关系)

   2.步骤:

   第一步实现步骤:

@interface MusicListTableViewController ()
- (IBAction)didClickPlayingBarButton:(UIBarButtonItem *)sender;
@end
//点击按钮推到第二个单例对象视图页面
- (IBAction)didClickPlayingBarButton:(UIBarButtonItem *)sender {
    //获取单例对象方法
    MusicPlayerViewController *playVC = [MusicPlayerViewController shareMusicPlayVC];
    //show到下一个页面
    [self.navigationController showViewController:playVC sender:self];
}

  第二步实现步骤:

    在视图将要出现的方法中,进行判断.历史不放歌曲的线标与当前下标是否相同.如果相同继续当前歌曲播放,如果不同则重新播放.

1.声明一个属性存储播放歌曲的下标

@property(nonatomic,assign)NSInteger currentIndex;  //历史存储上一个(旧的)音乐歌曲的下标  用于临时保存播放歌曲
    //赋一个初值
    _currentIndex = -1;

2.在视图将要出现的页面进行判断

#pragma mark ---视图将要出现时 ,播放音乐
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //判断按钮点击的那首歌是否与当前相等
    if (_index == _currentIndex) {
        return;
    }
[self prepareForPlaying]; }

注意:在这个判断中存在一个问题,如果播放第一首歌,下标index为0,那么_index = _currentIndex也相等,则就不会走开始播放的那个方法了,从而造成第一首个无法播放.

  解决办法:

-(void)prepareForPlaying
{
//_currentIndex用于临时存储index播放歌曲,作为一个临时存储变量 _currentIndex
= _index; NSIndexPath * indexPath = [NSIndexPath indexPathForRow:_currentIndex inSection:0];
 
原文地址:https://www.cnblogs.com/erdeng/p/4895925.html