Smooth player details panel drag on iOS

This commit is contained in:
Arkadiusz Fal
2026-04-20 01:18:06 +02:00
parent ad075319ee
commit 1ae73789a4
3 changed files with 23 additions and 7 deletions

View File

@@ -200,6 +200,12 @@ extension ExpandedPlayerSheet {
// Panel height when pinned (capped by maxPanelHeight for widescreen videos without description)
let naturalPanelHeight = screenHeight - fitHeight
let pinnedPanelHeight = min(naturalPanelHeight, maxPanelHeight)
let pillsOverlayOpacity: CGFloat = {
guard isPanelDragging, panelDragOffset > 0 else { return 1 }
let fadeDistance: CGFloat = 48
let progress = min(1, panelDragOffset / fadeDistance)
return 1 - progress
}()
// Video area height (space above panel) - may be larger than fitHeight when panel is capped
let videoAreaHeight = screenHeight - pinnedPanelHeight
@@ -413,6 +419,7 @@ extension ExpandedPlayerSheet {
} : nil,
playerControlsLayout: playerControlsLayout,
onFullscreen: { [self] in toggleFullscreen() },
pillsOverlayOpacity: pillsOverlayOpacity,
onDragChanged: { [self] offset in
// Set drag flags only on transition to avoid 120/sec @Observable writes
if !isPanelDragging {