使用AVAudioPlayer的当前时间控制幻灯片

时间:2011-03-31 16:27:35

标签: objective-c ios4 avaudioplayer

我使用AVAudioPlayer播放MP3文件。当玩家正在运行时,我想用播放器的当前时间来控制幻灯片。当然,我可以使用NSTimer来做到这一点,当比赛开始时会被解雇,但这听起来不像是一个甜蜜的解决方案。如何向观察者提供AVAudioPlayer的currentTime值?

谢谢, 菲利普

1 个答案:

答案 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:]以移除观察挂钩。