UIProgressView没有为音频播放器更新?

时间:2017-04-04 15:19:54

标签: ios ios10 nstimer avaudioplayer

播放歌曲时,ProgressView不会更新。通过阅读其他帖子我已经使用更新方法在每个时间间隔更新。

- (void)viewDidLoad {
[super viewDidLoad];
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Fix you_Coldplay" ofType:@"mp3" inDirectory:@"Coldplay"];
NSLog(@"%@",filePath);
NSURL *url = [NSURL fileURLWithPath:filePath];
NSLog(@"%@",url);
musicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
[musicPlayer prepareToPlay];
[trackProgress setProgress:0.0];
}

我有一个播放按钮,它也用于调用updateTime:method。

- (IBAction)playButton:(id)sender {
[musicPlayer play];

[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];

NSTimeInterval interval = musicPlayer.currentTime/musicPlayer.duration;
NSLog(@"%f",interval);
}

updateTime:方法

-(void)updateTime:(NSTimer *)timer {
trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration);
}

我是编程甚至是堆栈溢出的新手。这是我发布的第一个问题。请帮助我,并提前致谢。

3 个答案:

答案 0 :(得分:0)

首先将计时器值更改为:

//将值更改为0.5或1秒

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];

确保将trackProgress设置为0作为初始值。

- (void)viewDidLoad {
    [super viewDidLoad];
    trackProgress.progress = 0.0;
   }

希望这能解决您的问题。

答案 1 :(得分:0)

确保更新主线程上的进度视图

-(void)updateTime:(NSTimer *)timer {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.trackProgress.progress = (musicPlayer.currentTime/musicPlayer.duration);
    });
}

答案 2 :(得分:-1)

这可能会有所帮助。创建Timer并将其添加到common runloop,如下所示。同时保留对计时器的引用,以便以后可以停止。

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];