Revert "small delay before vertical scrubbing is possible"

This commit is contained in:
Arkadiusz Fal 2024-05-16 18:59:54 +02:00 committed by GitHub
parent db2417e455
commit d67e375f16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 93 deletions

View File

@ -3,53 +3,19 @@ import SwiftUI
extension VideoPlayerView { extension VideoPlayerView {
var playerDragGesture: some Gesture { var playerDragGesture: some Gesture {
let longPressGesture = LongPressGesture(minimumDuration: 0) DragGesture(minimumDistance: 30, coordinateSpace: .global)
.updating($isLongPressing) { currentState, gestureState, _ in #if os(iOS)
gestureState = currentState
}
.onEnded { _ in
if startTouchTime == nil {
startTouchTime = Date()
}
}
let dragGesture = DragGesture(minimumDistance: 30, coordinateSpace: .global)
.updating($dragGestureOffset) { value, state, _ in .updating($dragGestureOffset) { value, state, _ in
guard isVerticalDrag else { return } guard isVerticalDrag else { return }
var translation = value.translation var translation = value.translation
translation.height = max(0, translation.height) translation.height = max(0, translation.height)
state = translation state = translation
} }
#endif
.updating($dragGestureState) { _, state, _ in .updating($dragGestureState) { _, state, _ in
state = true state = true
} }
.onChanged { value in .onChanged { value in
if abs(value.translation.width) < abs(value.translation.height) {
processDragGesture(value)
} else if getElapsedTouchTime() >= 0.25 {
processDragGesture(value)
}
}
.onEnded { value in
if abs(value.translation.width) < abs(value.translation.height) {
onPlayerDragGestureEnded()
} else if getElapsedTouchTime() >= 0.25 {
onPlayerDragGestureEnded()
}
startTouchTime = nil
}
return longPressGesture.sequenced(before: dragGesture)
}
func getElapsedTouchTime() -> TimeInterval {
guard let startTouchTime = startTouchTime else {
return 0
}
return Date().timeIntervalSince(startTouchTime)
}
func processDragGesture(_ value: DragGesture.Value) {
guard player.presentingPlayer, guard player.presentingPlayer,
!controlsOverlayModel.presenting, !controlsOverlayModel.presenting,
dragGestureState else { return } dragGestureState else { return }
@ -98,7 +64,9 @@ extension VideoPlayerView {
guard verticalDrag > 0 else { return } guard verticalDrag > 0 else { return }
viewDragOffset = verticalDrag viewDragOffset = verticalDrag
if verticalDrag > 60, player.playingFullScreen { if verticalDrag > 60,
player.playingFullScreen
{
player.exitFullScreen(showControls: false) player.exitFullScreen(showControls: false)
#if os(iOS) #if os(iOS)
if Constants.isIPhone { if Constants.isIPhone {
@ -107,6 +75,10 @@ extension VideoPlayerView {
#endif #endif
} }
} }
.onEnded { _ in
onPlayerDragGestureEnded()
}
}
func onPlayerDragGestureEnded() { func onPlayerDragGestureEnded() {
if horizontalPlayerGestureEnabled, isHorizontalDrag { if horizontalPlayerGestureEnabled, isHorizontalDrag {

View File

@ -47,13 +47,9 @@ struct VideoPlayerView: View {
#if !os(tvOS) #if !os(tvOS)
@GestureState var dragGestureState = false @GestureState var dragGestureState = false
@GestureState var dragGestureOffset = CGSize.zero @GestureState var dragGestureOffset = CGSize.zero
@GestureState var isLongPressing = false @State var isHorizontalDrag = false // swiftlint:disable:this swiftui_state_private
// swiftlint:disable swiftui_state_private @State var isVerticalDrag = false // swiftlint:disable:this swiftui_state_private
@State var isHorizontalDrag = false @State var viewDragOffset = Self.hiddenOffset // swiftlint:disable:this swiftui_state_private
@State var isVerticalDrag = false
@State var viewDragOffset = Self.hiddenOffset
@State var startTouchTime: Date? = nil
// swiftlint:enable swiftui_state_private
#endif #endif
@ObservedObject var player = PlayerModel.shared // swiftlint:disable:this swiftui_state_private @ObservedObject var player = PlayerModel.shared // swiftlint:disable:this swiftui_state_private