如何在AVPlayer播放和暂停时执行某些操作?

3
我已经使用了 AVPlayer 在我的 Swift 应用程序中播放视频。我想在视频中间放置一个播放按钮(自定义按钮)。当点击按钮时,我知道如何播放和暂停视频。
但是我不知道如何在默认按钮上播放/暂停视频时显示/隐藏自定义按钮。是否有监听器或其他触发器可以在播放/暂停视频时触发?
同时,我还想隐藏默认控件中的“音频和字幕”图标。请问该怎么做?

你可以在操作中设置 playButton.enabled = falseplayButton.alpha = 0。这样,当你点击/轻触按钮时,其他按钮(或该按钮本身)将被禁用并消失。但是,需要将该按钮制作为 IBOutletIBAction。@Narendra - Lukesivi
@Lukeslvi,感谢您的回复。但是我并不是想知道如何显示/隐藏按钮,而是我无法理解的是如何在默认播放/暂停按钮被点击时触发IBAction?因为您无法将touch up inside操作拖动到默认按钮的IBAction中。例如,假设我进入视频屏幕并单击“播放”按钮(默认),则视频开始播放,我想隐藏自定义按钮。然后过一段时间,我单击“暂停”按钮(默认),视频暂停,我想显示自定义按钮。希望现在问题容易理解。 - Narendra Ojha
2个回答

3

以下是如何监听播放器状态变化并隐藏/显示按钮的方法:(假设您的播放器名称为player,按钮名称为playButton

player.addObserver(self, forKeyPath: "rate", options: .New, context: nil) // somewhere after player init
...
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
  if keyPath == "rate" {
    playButton.enabled = player.rate == 1 
  } else {
    super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context)
  }
}

如果播放器速率为0,那么就意味着视频没有在播放。

1
我正在使用AVPlayerController并添加“rate”观察器。当我处于离线状态时,播放器会暂停。但它不会检查“rate”观察器方法。 - Sankalap Yaduraj Singh
@SankalapYadurajSingh,请创建新问题,如果您有问题的话。或者尝试谷歌搜索。 - rkyr
这是我的新问题,请访问。http://stackoverflow.com/questions/39411636/avplayerviewcontroller-play-pause-issue-in-ios?noredirect=1#comment66148154_39411636 - Sankalap Yaduraj Singh

0

玩家初始化,然后,

self.player?.addObserver(self, forKeyPath: "rate", options: .new, context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if self.player?.rate == 0 {
        print("Pause")
    }else {
        print("Play")
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接