WKWebView allowsBackForwardNavigationGestures 属性分解

WKWebView  allowsBackForwardNavigationGestures属性作用是设置手势前进后退,若需要单独控制前进或者后退则需要对该属性进行分解。

分析发现WKWebView的前进后退是由两个UIScreenEdgePanGestureRecognizer (UIRectEdgeLeft、UIRectEdgeRigth) 手势来控制的,在allowsBackForwardNavigationGestures SET 操作时候进行了手势的增加删除(删除手势并且手势的target会被置nil)。并不是单纯的enabled设置。

WKWebView allowsBackForwardNavigationGestures 属性分解_第1张图片
手势分析

找到手势就好办了,创建一个AYWKWebView 继承 WKWebView,

WKWebView allowsBackForwardNavigationGestures 属性分解_第2张图片
.h  头
WKWebView allowsBackForwardNavigationGestures 属性分解_第3张图片
.m  延展

用NS_UNAVAILABLE宏禁用allowsBackForwardNavigationGestures,并且定义两个分解属性

在WebView init时候调用super.allowsBackForwardNavigationGestures = YES; (self.allowsBackForwardNavigationGestures已经被禁用),重写-[addGestureRecognizer:]方法,UIScreenEdgePanGestureRecognizer手势进行强引用,把新添加的手势禁用掉,

然后在allowsBackNavigationGestures和allowsForwardNavigationGestures的 SET 方法设置对应手势的enabled属性,

WKWebView allowsBackForwardNavigationGestures 属性分解_第4张图片
allowsBackForwardNavigationGestures分解

重写-[addGestureRecognizer:]为避免其它UIScreenEdgePanGestureRecognizer手势干扰,增加一个allowsBackNavigationGesturesSet属性标记是否是由于allowsBackNavigationGestures设置导致,在[supersetAllowsBackForwardNavigationGestures:]方法执行前后进行allowsBackNavigationGesturesSet开关控制

allowsBackNavigationGesturesSet开关控制

然后改写一下-[addGestureRecognizer:]方法

WKWebView allowsBackForwardNavigationGestures 属性分解_第5张图片
addGestureRecognizer最终代码

这样就实现了allowsBackForwardNavigationGestures属性的分解

WKWebView allowsBackForwardNavigationGestures 属性分解_第6张图片
使用场景

你可能感兴趣的:(WKWebView allowsBackForwardNavigationGestures 属性分解)