Gesto de Pan com AVPlayer

Esse recurso é realmente importante para o meu aplicativo e realmente gostaria de alguma ajuda. Basicamente, quero adicionar umUIPanGestureRecognizer para um player de vídeo, para que o usuário possa avançar / retroceder rapidamente com o gesto.

A Apple possui um código de exemplo que usa o Swift 3 e tem todo o player de vídeo já criado. A única coisa que falta é aUIPanGestureRecognizer. Este é o link:https://developer.apple.com/library/content/samplecode/AVFoundationSimplePlayer-iOS/Introduction/Intro.html#//apple_ref/doc/uid/TP40016103

NoviewWillAppear Eu adicionei o gesto assim:

let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePanGesture))
view.addGestureRecognizer(panGesture)

Este é o código que está funcionando um pouco. Atualmente está esfregando.

O problema é que toda vez que inicio o gesto de panorâmica, o vídeo pula para o meio e começo a partir daí. Em vez de avançar / retroceder rapidamente de onde o vídeo está atualmente, o gesto de panorâmica pula o vídeo para o meio e, em seguida, permite-me avançar / retroceder rapidamente, o que não é bom.

func handlePanGesture(sender: UIPanGestureRecognizer) {
    switch sender.state {
    case .began, .changed:
        let translation = sender.translation(in: self.view)
        var horizontalTranslation = Float(translation.x)

        let durationInSeconds = Float(CMTimeGetSeconds(player.currentItem!.asset.duration))

        // Using 275 as the limit for delta along x
        let translationLimit: Float = 275
        let minTranslation: Float = -1 * translationLimit
        let maxTranslation: Float = translationLimit

        if horizontalTranslation > maxTranslation {
            horizontalTranslation = maxTranslation
        }

        if horizontalTranslation < minTranslation {
            horizontalTranslation = minTranslation
        }

        let timeToSeekTo = normalize(delta: horizontalTranslation , minDelta: minTranslation, maxDelta: maxTranslation, minDuration: 0, maxDuration: durationInSeconds)
        print("horizontal translation \(horizontalTranslation) \n timeToSeekTo: \(timeToSeekTo)")

        let cmTime = CMTimeMakeWithSeconds(Float64(timeToSeekTo), self.player.currentTime().timescale)
        player.seek(to: cmTime)

    default:
        print("default")
    }

}

func normalize(delta: Float, minDelta: Float, maxDelta: Float, minDuration: Float, maxDuration: Float) -> Float {

    let result = ((delta - minDelta) * (maxDuration - minDuration) / (maxDelta - minDelta) + minDuration)
    return result
}

Qualquer ajuda seria ótima - obrigado!

questionAnswers(2)

yourAnswerToTheQuestion