Schwenkbewegung mit AVPlayer

Diese Funktion ist für meine App sehr wichtig und ich hätte gerne Hilfe. Grundsätzlich möchte ich ein @ hinzufügUIPanGestureRecognizer an einen Videoplayer, damit der Benutzer das Video mit der Geste schnell vor- und zurückspulen kann.

Apple enthält einen Beispielcode, der Swift 3 verwendet und den gesamten Videoplayer bereits erstellt hat. Das einzige was fehlt ist dasUIPanGestureRecognizer. Das ist die Verbindung:https: //developer.apple.com/library/content/samplecode/AVFoundationSimplePlayer-iOS/Introduction/Intro.html#//apple_ref/doc/uid/TP4001610

ImviewWillAppear Ich habe die Geste folgendermaßen hinzugefügt:

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

Dies ist der Code, der etwas funktioniert. Es wird gerade geschrubbt.

Das Problem ist, dass jedes Mal, wenn ich die Schwenkgeste starte, das Video in die Mitte springt und ich von dort aus starte. Anstatt schnell vor- oder zurückzuspulen, wo sich das Video gerade befindet, überspringt die Schwenkgeste das Video in die Mitte und ermöglicht mir dann das schnelle Vor- oder Zurückspulen, was nicht gut ist.

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
}

Jede Hilfe wäre toll - danke!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage