播放歌曲时,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);
}
我是编程甚至是堆栈溢出的新手。这是我发布的第一个问题。请帮助我,并提前致谢。
答案 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];