2017-02-15 49 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的答案。 –