Пан Жест с AVPlayer

Эта функция очень важна для моего приложения, и ей действительно нужна помощь. В основном, я хочу добавитьUIPanGestureRecognizer на видеоплеер, чтобы пользователь мог перемотать видео вперед / назад с помощью жеста.

У Apple есть некоторый пример кода, который использует Swift 3 и уже создан весь видеоплеер. Не хватает толькоUIPanGestureRecognizer, Это ссылка:https://developer.apple.com/library/content/samplecode/AVFoundationSimplePlayer-iOS/Introduction/Intro.html#//apple_ref/doc/uid/TP40016103

ВviewWillAppear Я добавил жест так:

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

Это код, который работает несколько. Это в настоящее время очистки.

Проблема в том, что каждый раз, когда я запускаю жест панорамирования, видео переходит к середине, и я начинаю оттуда. Вместо быстрой перемотки вперед / назад от того места, где в данный момент находится видео, жест панорамирования пропускает видео до середины, а затем позволяет перематывать вперед / назад, что не очень хорошо.

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
}

Любая помощь будет отличной - спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос