我正在将我的应用程序适应Swift 3,但遇到了这个问题。这曾经可以在Swift 2.2上运行,但是现在坏了。 moviePlayBackFinished永远不会被调用。我尝试以多种方式添加观察者,但都没有成功。
NotificationCenter.default.addObserver(self, selector: #selector(self.moviePlayBackFinished(_:)),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);
NotificationCenter.default.addObserver(self, selector: #selector(moviePlayBackFinished(_:)),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);
NotificationCenter.default.addObserver(self, selector: #selector(self.moviePlayBackFinished(sender:)),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem);
// (...)
@objc func moviePlayBackFinished(sender : AnyObject) {
print("playbackFinished");
let zeroCM : CMTime = CMTime(seconds: 0, preferredTimescale: 1000000000);
playerLayer.player?.seek(to: zeroCM);
}
@objc func moviePlayBackFinished(_ notification: Notification) {
print("playbackFinished");
let zeroCM : CMTime = CMTime(seconds: 0, preferredTimescale: 1000000000);
playerLayer.player?.seek(to: zeroCM);
}
任何想法都会被应用。
谢谢
最佳答案
此问题有多种可能的原因。
NotificationCenter
.default
.addObserver(self,
selector: #selector(self.moviePlayBackFinished(sender:)),
name: .AVPlayerItemDidPlayToEndTime,
object: player.currentItem)
首先,您必须将object设置为nil。 AVPlayerItemDidPlayToEndTime
通知会自动将对象设置为最后到达的AVPlayerItem
。如果手动更改它,将不会收到AVPlayerItemDidPlayToEndTime
的任何通知。其次,根据
AVPlayerItemDidPlayToEndTime
文档:因此,请确保您应该检查通知是否在所需的线程上。
没关系,您从
UIViewController
或AVPlayer
子类中添加了观察者。