Ios 移除UIPageViewController中的循环AVPlayer观察者
大家好,我在UIPageViewController和通知方面遇到了问题 我有一个PageUIPageVEWController和一组页面,因此在这些页面中,我有一个AVplayer在循环中播放,如下所示:Ios 移除UIPageViewController中的循环AVPlayer观察者,ios,swift,xcode,mobile,Ios,Swift,Xcode,Mobile,大家好,我在UIPageViewController和通知方面遇到了问题 我有一个PageUIPageVEWController和一组页面,因此在这些页面中,我有一个AVplayer在循环中播放,如下所示: func loopVideo(videoPlayer:AVPlayer){ NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, objec
func loopVideo(videoPlayer:AVPlayer){
NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil){
[weak videoPlayer] notification in
videoPlayer?.seek(to: kCMTimeZero)
videoPlayer?.play()
}
}
问题是当我使用滚动更改页面时,来自其他页面的通知会更改我当前的视频播放器。我在通知中添加了一个打印,我可以看到调用其他页面通知。我不知道我该怎么办
我尝试使用NotificationCenter.default.removeObserver(self)删除视图中的通知,但没有成功
你能帮我吗
谢谢收到通知后,您只需检查一下即可 检查作为
AVPlayerItem
的通知对象是否与可视视图播放器playerItem
,videoPlayer.currentItem
或者只需检查通知中的AVPlayerItem
是否与yourCustomView.playerItem
编辑:
我看你的对象是零,应该是AVPlayerItem
NotificationCenter.default.removeObserver(self)
在此处不起作用,因为您从未将自己添加为目标
而是保留对通知的引用并将其删除。我认为应该是这样的:
var notificationObserver:NSObjectProtocol?
func loopVideo(videoPlayer:AVPlayer){
self.notificationObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil){
[weak videoPlayer] notification in
videoPlayer?.seek(to: kCMTimeZero)
videoPlayer?.play()
}
}
func removeObserver() {
NotificationCenter.default.removeObserver(self.notificationObserver)
}
谢谢你,就像你说的那样,我解决了插入player.currentItem的问题。非常感谢,亲爱的!我理解詹姆斯P谢谢你的回答我现在能更好地理解了。我用@sleek的答案解决了这个问题。