From d7e39f12534b3b5b5a44599a0e564d8dd5db9910 Mon Sep 17 00:00:00 2001 From: Doug Date: Thu, 6 Feb 2025 18:10:11 +0000 Subject: [PATCH] Fix a bug where the preview controller breaks when swiping quickly. --- .../View/TimelineMediaPreviewController.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewController.swift b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewController.swift index 2c3f560f6e..726e46bbd5 100644 --- a/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewController.swift +++ b/ElementX/Sources/Screens/FilePreviewScreen/View/TimelineMediaPreviewController.swift @@ -25,6 +25,7 @@ class TimelineMediaPreviewController: QLPreviewController { private var navigationBar: UINavigationBar? { view.subviews.first?.subviews.first { $0 is UINavigationBar } as? UINavigationBar } private var toolbar: UIToolbar? { view.subviews.first?.subviews.last { $0 is UIToolbar } as? UIToolbar } + private var pageScrollView: UIScrollView? { view.subviews.first?.subviews.first?.subviews.first?.subviews.first?.subviews.first?.subviews.first as? UIScrollView } private var captionView: UIView { captionHostingController.view } override var overrideUserInterfaceStyle: UIUserInterfaceStyle { @@ -184,6 +185,13 @@ class TimelineMediaPreviewController: QLPreviewController { private func handleFileLoaded(itemID: TimelineItemIdentifier.EventOrTransactionID) { guard (currentPreviewItem as? TimelineMediaPreviewItem.Media)?.id == itemID else { return } + + // There's a bug where refreshCurrentPreviewItem completely breaks the QLPreviewController + // if it's called whilst swiping between items. So don't let that happen. + if let scrollView = pageScrollView, scrollView.isDragging || scrollView.isDecelerating { + return + } + refreshCurrentPreviewItem() }