Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中向AVPlayer添加自定义控件_Ios_Swift_Swift3_Avplayer_Avplayeritem - Fatal编程技术网

Ios 在swift中向AVPlayer添加自定义控件

Ios 在swift中向AVPlayer添加自定义控件,ios,swift,swift3,avplayer,avplayeritem,Ios,Swift,Swift3,Avplayer,Avplayeritem,我正在尝试创建一个表视图,以便能够播放视频。我能够做到这一点,使用AVPlayer和图层 我想在视频视图的底部添加一个带有滑块的自定义播放和暂停按钮 AVPlayerController内置这些控件 如何在AVPlayer中实现这些功能。我一直在寻找例子。但我没有找到 是否有我可以遵循的GitHub示例或代码示例?任何帮助都将不胜感激 这里我添加了一些要点,您需要根据需要进行定制 步骤1 最初隐藏AVPlayer控件 YourAVPlayerViewController.showsPlayba

我正在尝试创建一个表视图,以便能够播放视频。我能够做到这一点,使用AVPlayer和图层

我想在视频视图的底部添加一个带有滑块的自定义播放和暂停按钮

AVPlayerController内置这些控件

如何在AVPlayer中实现这些功能。我一直在寻找例子。但我没有找到


是否有我可以遵循的GitHub示例或代码示例?任何帮助都将不胜感激

这里我添加了一些要点,您需要根据需要进行定制

步骤1

最初隐藏
AVPlayer
控件

 YourAVPlayerViewController.showsPlaybackControls = false
步骤2

创建如下结构

一个标签用于当前持续时间,一个标签用于总持续时间,一个UIbutton用于暂停和播放当前播放器,一个UISlider用于搜索视频

步骤3

首先关闭简单的步骤

首先停止并使用按钮操作播放播放器,currentPlayer是您的AVPlayer名称

然后设置视频持续时间,如下所示

第三,将玩家当前时间设置为当前持续时间标签

以下方法将从NSTimeinterval转换为HH:MM:SS

最后,我们使用滑块控制来计算寻道时间

让我们开始行动,开始时touchbegin是start,然后停止播放器

手放式车头滑轨手放式车头滑轨

为计算
sender.value*CMTimeGetSeconds(currentPlayer.currentItem.duration)设置当前项目标签

最后基于seek移动玩家


除了Anbu.Karthik的答案外,滑块操作可以通过以下单一功能更好地处理:

slider.addTarget(self, action: #selector(self.handlePlayheadSliderValueChanged(sender:event:)), for: .valueChanged)
滑块值更改:

注意处理滑块事件所有阶段的开关盒


你看过苹果的示例代码了吗?你需要隐藏自定义控件并创建自己的控件我正在寻找swift示例非常详细的答案:)如何全屏?@BhavinRamani-根据问题,我添加了答案,如果你需要全屏,需要再添加一个按钮,并在操作内部使用转换rotate@Anbu.karthik如何在avplayer上添加此自定义视图?@SyedAliSalman-首先创建一个UIView(yourview addsubvew.avplayer),然后添加customview(yourview.addview.customview)
    let duration : CMTime = currentPlayer.currentItem!.asset.duration
    let seconds : Float64 = CMTimeGetSeconds(duration)

    lblOverallDuration.text = self.stringFromTimeInterval(interval: seconds)
    let duration : CMTime = currentPlayer.currentTime()
    let seconds : Float64 = CMTimeGetSeconds(duration)

    lblcurrentText.text = self.stringFromTimeInterval(interval: seconds)
func stringFromTimeInterval(interval: TimeInterval) -> String {

    let interval = Int(interval)
    let seconds = interval % 60
    let minutes = (interval / 60) % 60
    let hours = (interval / 3600)
    return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
_playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderTouchBegin), for: .touchDown)
_playheadSlider.addTarget(self, action:    #selector(self.handlePlayheadSliderTouchEnd), for: .touchUpInside)
_playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderTouchEnd), for: .touchUpOutside)
_playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderValueChanged), for: .valueChanged)
@IBAction func handlePlayheadSliderTouchBegin(_ sender: UISlider) {
currentPlayer.pause()
}
@IBAction func handlePlayheadSliderValueChanged(_ sender: UISlider) {

        let duration : CMTime = currentPlayer.currentItem!.asset.duration
     let seconds : Float64 = CMTimeGetSeconds(duration) * sender.value
 //   var newCurrentTime: TimeInterval = sender.value * CMTimeGetSeconds(currentPlayer.currentItem.duration)
lblcurrentText.text = self.stringFromTimeInterval(interval: seconds)
   }
 @IBAction func handlePlayheadSliderTouchEnd(_ sender: UISlider) {

  let duration : CMTime = currentPlayer.currentItem!.asset.duration
var newCurrentTime: TimeInterval = sender.value * CMTimeGetSeconds(duration)
var seekToTime: CMTime = CMTimeMakeWithSeconds(newCurrentTime, 600)
currentPlayer.seek(toTime: seekToTime)
}
slider.addTarget(self, action: #selector(self.handlePlayheadSliderValueChanged(sender:event:)), for: .valueChanged)
@objc func handlePlayheadSliderValueChanged(sender: UISlider, event: UIEvent) {
    if let duration: CMTime = player?.currentItem?.asset.duration {
        let newCurrentTime: Float64 = CMTimeGetSeconds(duration) * Double(sender.value)
        videoLengthLabel.text = self.stringFromTimeInterval(interval: newCurrentTime)
        if let touchEvent = event.allTouches?.first {
            switch (touchEvent.phase) {
            case .began:
                // on slider touch begin
                pauseVideo()
                break
            case .moved:
                // on slider movement
                let seekToTime: CMTime = CMTimeMakeWithSeconds(newCurrentTime, preferredTimescale: 600)
                player?.seek(to: seekToTime, completionHandler: { (completedSeek) in
                    // any additional operation upon seek completion
                })
                break
            case .ended:
                // on slider touch end (finger lift)
                playVideo()
                break
            default:
                break
            }
        }
    }
}