我正在开发一个音乐播放器App . 播放音频时使用播放/暂停按钮和进度条 . 我正在用NSTimer调用一个方法来更新进度条 . 我需要的是暂停进度条并将其恢复到停止的位置 .
我可以使用链接中引用的代码暂停计时器以及进度条:1 . How to pause a NSTimer? 2. How to Pause/Play NSTimer?
但我正在努力恢复它,因为我被迫离开了 . 我还需要根据音频更新进度条 .
My code is as below:
AVAudioPlayer *audioPlayer;
NSTimer *audioTimer;
BOOL play;
BOOL ispaused;
int seconds1;
int minutes1;
int hours1;
NSDate *pauseStart, *previousFireDate;
Play/Pause Button action:
- (IBAction)playSoundTapped:(id)sender
{
songUrl = [NSURL URLWithString:@"http://www.stephaniequinn.com/Music/Allegro%20from%20Duet%20in%20C%20Major.mp3"];
self.playerItem = [AVPlayerItem playerItemWithURL:songUrl];
self.player = [AVPlayer playerWithPlayerItem:self.playerItem];
self.player = [AVPlayer playerWithURL:songUrl];
if (play==YES)
{
if (ispaused == YES)
{
float pauseTime = -1*[pauseStart timeIntervalSinceNow];
[audioTimer setFireDate:[NSDate dateWithTimeInterval:pauseTime sinceDate:previousFireDate]];
audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
[self.player play];
ispaused = NO;
}
else
{
audioTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
[self.player play];
ispaused = NO;
}
_playImg.image=[UIImage imageNamed:@"Pause.png"];
play=NO;
}
else
{
[self.player pause];
ispaused = YES;
pauseStart = [NSDate dateWithTimeIntervalSinceNow:0];
previousFireDate = [audioTimer fireDate];
[audioTimer setFireDate:[NSDate distantFuture]];
_playImg.image=[UIImage imageNamed:@"Play.png"];
play=YES;
}
}
Updates ProgressBar:
- (void)updateProgress
{
if (ispaused == NO)
{
seconds1 += 1;
if (seconds1 == 60)
{
seconds1 = 0;
minutes1++;
if (minutes1 == 60)
{
minutes1 = 0;
hours1++;
}
}
float duration = CMTimeGetSeconds([_playerItem duration]);
float actDuration = duration/100;
float currentTime = CMTimeGetSeconds([_player currentTime]);
float minutes = currentTime/60;
//float seconds = (currentTime - minutes) * 60;
NSLog(@"Duration: %.2f",actDuration);
NSLog(@"Current Time: %.2f",minutes);
NSString *durStr = [NSString stringWithFormat: @"%f",duration];
if ([durStr isEqual: @"nan"])
{
NSLog(@"Nan");
}
else
{
[self setProgress:minutes animated:YES];
}
}
else
{
NSLog(@“Paused”);
}
}
它正在重新启动音频而不是恢复 . 由于我是iOS的初学者,我不知道我在哪里做错了 . 请任何人帮助我......
2 回答
我在我的项目中做了什么,
我有播放和暂停的常用按钮,它只是分别将
normal state
和selected state
的 Headers 更改为play
和pause
.所以在我的方法中,
playPause
是按钮,audioPlayer
是AVAudioPlayer
对象,sliderTimer
是NSTimer
对象,mySlider
是UISlider
对象来显示进度 . 而已 . 您可以像我提到的那样管理您的案例 .并且
updateSlider
和sliderChanged
方法如下所示,因此,如果用户手动更改
UISlider
,则会调用sliderChanged
,您的播放器将在此时到达 .我知道了!
我只是在暂停功能中添加以下内容
并将其设置为音频播放器的当前时间,并参考了凯尔默的答案
当停止时
和rate是一个全局声明的浮点数 . 感谢Ketan ..!