如何将 KVO 添加到 MPMoviePlayer currentPlaybackTime?

Posted

技术标签:

【中文标题】如何将 KVO 添加到 MPMoviePlayer currentPlaybackTime?【英文标题】:How to add a KVO to MPMoviePlayer currentPlaybackTime? 【发布时间】:2011-04-26 13:44:30 【问题描述】:

如何将 KVO 添加到 MPMoviePlayer 类的 currentPlaybackTime 属性?

【问题讨论】:

通用方式工作得很好,但如果你想捕获播放器控件(例如搜索滑块)对播放时间的操作,它不会帮助你 - 那些不使用 currentPlaybackTime 属性二传手实现寻找。 @Till 我不相信你能做到这一点,因为 currentPlaybackTime 没有被标记为 KVO 兼容,而且我自己尝试观察它并没有导致更改通知触发。请参阅下面的替代建议。 @Carlos 对,从结果来看,就是我说的;它不会工作。我仍然不清楚将 currentPlaybackTime 描述为不符合 KVO 标准。感谢您指出这一点。 【参考方案1】:

您不能将 KVO 添加到 currentPlaybackTime,因为该属性未明确声明为与 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 是的,这似乎是目前跟踪位置的唯一方法。感谢您接受答案。 @BenScheirman 我知道,我对此感到有些羞愧 - 但似乎这是目前唯一的解决方案 为什么我们没有像 AVPlayer 那样的“addPeriodicTimeObserverForInterval:”?

以上是关于如何将 KVO 添加到 MPMoviePlayer currentPlaybackTime?的主要内容,如果未能解决你的问题,请参考以下文章

MPMoviePlayer 控制样式条框高度

向 MPMoviePlayer 添加 Airplay 支持

如何在使用 Swift 在 iOS 8 中播放电影时旋转 MPMoviePlayer?

如何替换 MPMoviePlayer 通知?

MPMoviePlayer 或 AVPlayer 帧前进

使用Block实现KVO