自定义控制AVPlayerViewController的播放速度

时间:2016-04-25 18:22:37

标签: ios objective-c avplayerviewcontroller

  1. 我们可以将自定义播放速度(0.5,1.0,1.5,2.0)控制添加到 AVPlayerViewController 吗?
  2. 我们是否可以使用UISlider值更改来刷新速度?
  3. 如果当前正在播放,我们可以更改播放速度吗?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 我们可以在 AVPlayerViewController 中添加自定义播放速度(0.5、1.0、1.5、2.0)控制吗?
  2.   

您可以通过进行一些修改来向 AVPlayerViewController 添加自定义播放速度按钮。

在iOS 11中,即,您可以通过在“ 播放/暂停”按钮旁边添加控件来向AVPlayerViewController添加按钮。该按钮具有一个可访问标识符,它将帮助您找到该控件。

iOS 11 AVPlayerViewController

因此,我所做的基本上是找到“ 播放/暂停”按钮,然后将“播放速度”按钮添加到“ 播放/暂停”按钮的超级视图中。

func findPlayPauseButton(view: UIView) -> UIView? {
    if view.accessibilityIdentifier == "Play/Pause" {
        return view
    }
    for subview in view.subviews {
        if let result = findPlayPauseButton(view: subview) {
            return result
        }
    }
    return nil
}

guard let playerView = playerViewController?.view else {
    return
}

guard let playPauseButton = findPlayPauseButton(view: playerView) else {
    return
}

if let playerControlsView = playPauseButton.superview {
    let playbackSpeedButton = UIButton(type: .system)
    playbackSpeedButton.accessibilityIdentifier = "PlaybackSpeed"
    playbackSpeedButton.setTitle("1 X", for: .normal)
    playbackSpeedButton.addTarget(self, action: #selector(self.playbackSpeedButtonTapped), for: .touchUpInside)
    playbackSpeedButton.translatesAutoresizingMaskIntoConstraints = false
    playerControlsView.addSubview(playbackSpeedButton)
    NSLayoutConstraint.activate([
        playbackSpeedButton.heightAnchor.constraint(equalTo: playPauseButton.heightAnchor),
        playbackSpeedButton.widthAnchor.constraint(equalToConstant: 50),
        playbackSpeedButton.leadingAnchor.constraint(equalTo: playPauseButton.trailingAnchor, constant: 70),
        playbackSpeedButton.bottomAnchor.constraint(equalTo: playPauseButton.bottomAnchor),
    ])
}

结果:

Playback Speed Button Example

您可能知道,由于您会发现所有极端情况,因此存在很多缺点,即,您还需要注意情况,您需要检查该hack在每个新产品上是否仍然有效iOS版本等。如果您的应用支持iOS 10,则情况会有所不同,因为AVPlayerViewController的UI在iOS 11中已更改。

  
      
  1. 有没有一种方法可以使用UISlider值更改来刷新速度速率?
  2.   

是,只需添加一个UIButton即可代替播放速度的UISlider

  
      
  1. 如果当前正在播放,我们可以更改播放速度吗?
  2.   

是的,如果正在播放,则只需更改播放器的rate属性:例如,更改为1.25 X => playerViewController.player?.rate = 1.25

更新:

要求增强!雷达号码是46022646:Playback speed control for AVPlayerViewController (Video)