2017-02-15 19 views
0

嗨,大家好,我遇到了UIPageViewController和Notifications的问题。在UIPageViewController中删除循环AVPlayer观察器

我有一个页面的阵列页面UIPageVewController,所以在这些网页我有一个AVplayer在循环再生波纹管:

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() 
    } 
} 

问题是,当我改变页面滚动通知从另一个页面改变我当前播放AVPlayer的视频。我在通知内放了一个打印,我可以看到调用其他页面的通知。我不知道我必须做什么?

我试图使用NotificationCenter.default.removeObserver(self)在viewDidDisappear中删除通知,但没有奏效。

你能帮我吗?

谢谢

回答

1

当收到通知时,您可以简单地进行检查。

检查通知对象为AVPlayerItem是一样的可见视图玩家playerItemvideoPlayer.currentItem

或者干脆检查通知中AVPlayerItem是一样的yourCustomView.playerItem

编辑:

我看到你的对象是零,它应该是AVPlayerItem。 Check this thread.

+1

谢谢潜行,因为你说我解决了插入player.currentItem的问题。 非常感谢亲爱的! –

1

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) 
} 
+0

我明白詹姆斯P谢谢你的回答,我现在可以更好地理解。 我解决了@Sneak的答案。 –