mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
Dynamically disables interactive back gesture when viewing source header image
Only disables gesture if touches are within headerContainerView to ensure back gesture works as expected majority of the time.
This commit is contained in:
@@ -20,7 +20,8 @@ protocol ScrollableContentViewController: UIViewController
|
||||
|
||||
class HeaderContentViewController<Header: UIView, Content: ScrollableContentViewController> : UIViewController,
|
||||
UIAdaptivePresentationControllerDelegate,
|
||||
UIScrollViewDelegate
|
||||
UIScrollViewDelegate,
|
||||
UIGestureRecognizerDelegate
|
||||
{
|
||||
var tintColor: UIColor? {
|
||||
didSet {
|
||||
@@ -48,6 +49,8 @@ class HeaderContentViewController<Header: UIView, Content: ScrollableContentView
|
||||
private var backgroundBlurView: UIVisualEffectView!
|
||||
private var contentViewControllerShadowView: UIView!
|
||||
|
||||
private var ignoreBackGestureRecognizer: UIPanGestureRecognizer!
|
||||
|
||||
private var blurAnimator: UIViewPropertyAnimator?
|
||||
private var navigationBarAnimator: UIViewPropertyAnimator?
|
||||
private var contentSizeObservation: NSKeyValueObservation?
|
||||
@@ -117,6 +120,11 @@ class HeaderContentViewController<Header: UIView, Content: ScrollableContentView
|
||||
self.headerContainerView = UIView(frame: .zero)
|
||||
self.view.addSubview(self.headerContainerView, pinningEdgesWith: .zero)
|
||||
|
||||
self.ignoreBackGestureRecognizer = UIPanGestureRecognizer(target: self, action: nil)
|
||||
self.ignoreBackGestureRecognizer.delegate = self
|
||||
self.headerContainerView.addGestureRecognizer(self.ignoreBackGestureRecognizer)
|
||||
self.navigationController?.interactivePopGestureRecognizer?.require(toFail: self.ignoreBackGestureRecognizer) // So we can disable back gesture when viewing header.
|
||||
|
||||
self.headerScrollView = UIScrollView(frame: .zero)
|
||||
self.headerScrollView.delegate = self
|
||||
self.headerScrollView.isPagingEnabled = true
|
||||
@@ -420,6 +428,20 @@ class HeaderContentViewController<Header: UIView, Content: ScrollableContentView
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: UIGestureRecognizerDelegate
|
||||
|
||||
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool
|
||||
{
|
||||
// Ignore interactive back gesture when viewing header, which means returning `true` to enable ignoreBackGestureRecognizer.
|
||||
let disableBackGesture = self.isViewingHeader
|
||||
return disableBackGesture
|
||||
}
|
||||
|
||||
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
|
||||
{
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
private extension HeaderContentViewController
|
||||
|
||||
Reference in New Issue
Block a user