我使用AVAudioPlayer播放MP3文件。当玩家正在运行时,我想用播放器的当前时间来控制幻灯片。当然,我可以使用NSTimer来做到这一点,当比赛开始时会被解雇,但这听起来不像是一个甜蜜的解决方案。如何向观察者提供AVAudioPlayer的currentTime值?
谢谢, 菲利普
答案 0 :(得分:0)
最干净的方法是使用AVPlayer
自行设置音频播放器,并使用-[AVPlayer addBoundaryTimeObserverForTimes:queue:usingBlock:]
设置一个时间过去的观察。
如果您坚持使用AVAudioPlayer,我相信您可以使用Key-Value Observing来监听当前时间的变化:
static NSString *someObservationContext = @"something";
[audioPlayer addObserver:self forKeyPath:@"currentTime" options:0 context:&someObservationContext];
然后实施
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == &someObservationContext) {
NSTimeInterval t = [(AVAudioPlayer *)object currentTime];
// do your thing
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
在拆除AVAudioPlayer之前,请务必致电-[NSObject removeObserver:forKeyPath:]
以移除观察挂钩。