iOS swift UIScrollview 和 UIPanGestureRecognizer 手势冲突 解决方法

212 阅读1分钟

当 UIScrollview 和 UIPanGestureRecognizer 手势冲突。默认 只响应 UIScrollview。

如何 响应UIScrollview 的同时,也 响应 UIPanGestureRecognizer 呢。

答:设置 响应UIScrollview 的手势代理

LZScrollViewDelegate: UIGestureRecognizerDelegate {
   
    
    /// 根据手势优先级决定行为; 返回 true 允许两个手势同时识别,手势事件会一直往下传递
    public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        if self.fp_scrollViewPopGestureRecognizerEnable, self.contentOffset.x <= 0, let gestureDelegate = otherGestureRecognizer.delegate {
            
            if gestureDelegate.isKind(of: FullscreenPopGesture_NTSRecognizerDelegate.self) {
                return true
            }
            
        }
        
        
        return false
    }
}

上述解决办法有时会出现一个bug。 就是 UIPanGestureRecognizer 在滑动时,UIScrollview 也会滑动。

设置手势优先级

self.panGestureRecognizer.require(toFail: otherGestureRecognizer)//设置手势的优先级高于scroll的手势