如何为MPMoviePlayer的currentPlaybackTime属性添加KVO?

6
如何在MPMoviePlayer类的currentPlaybackTime属性上添加KVO?

常规方法完全可以运行,但如果您想捕获播放器控件(例如seek-slider)对回放时间所做的操纵,则无法帮助您 - 这些控件不使用currentPlaybackTime属性setter来实现寻求。 - Till
@Till 我不相信你能做到这一点,因为 currentPlaybackTime 没有标记为 KVO 兼容,而我自己尝试观察它也没有导致更改通知触发。请参见下面我的替代建议。 - Carlos P
@Carlos 对,从结果来看,这就是我说的;它不会起作用。但是我没有清楚地描述currentPlaybackTime不符合KVO规范。感谢您指出这一点。 - Till
1个回答

14

由于currentPlaybackTime属性未明确声明为KVO兼容,因此无法向其添加KVO。

相反,你可以尝试定期轮询播放器并存储位置,使用以下代码:

- (void) BeginPlayerPolling {
self.pollPlayerTimer = [NSTimer scheduledTimerWithTimeInterval:5
                                                       target:self 
                                                     selector:@selector(PollPlayerTimer_tick:)
                                                     userInfo:nil 
                                                      repeats:YES];  

}

- (void) PollPlayerTimer_tick:(NSObject *)sender {
// Store current playback position
if (player.playbackState == MPMoviePlaybackStatePlaying)
    lastRecordedPlaybackTime = player.currentPlaybackTime;
}

- (void) EndPlayerPolling {
if (pollPlayerTimer != nil)
{
    [pollPlayerTimer invalidate];
    self.pollPlayerTimer = nil;
}
}

这也是我最终采用的解决方案 :) - Milk78
@Milk78 是的,目前似乎这是跟踪位置的唯一方法。感谢您接受答案。 - Carlos P
@BenScheirman 我知道,我有点羞愧 - 但似乎现在这是唯一的解决方案。 - Carlos P
为什么我们没有像AVPlayer中的“addPeriodicTimeObserverForInterval:”这样的东西? - Paweł Brewczynski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接