一.效果图:
实现功能:在"正在播放"按钮时,切换到下一个界面并继续原歌曲的播放进度
二.实现方法及步骤
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];
时间: 2024-12-29 20:49:03