WKWebView allowsBackForwardNavigationGestures 屬性分解

WKWebView? allowsBackForwardNavigationGestures屬性作用是設置手勢前進后退,若需要單獨控制前進或者后退則需要對該屬性進行分解。

分析發現WKWebView的前進后退是由兩個UIScreenEdgePanGestureRecognizer (UIRectEdgeLeft、UIRectEdgeRigth) 手勢來控制的,在allowsBackForwardNavigationGestures SET 操作時候進行了手勢的增加刪除(刪除手勢并且手勢的target會被置nil)。并不是單純的enabled設置。

手勢分析

找到手勢就好辦了,創建一個AYWKWebView 繼承 WKWebView,

.h ?頭
.m ?延展

用NS_UNAVAILABLE宏禁用allowsBackForwardNavigationGestures,并且定義兩個分解屬性

在WebView init時候調用super.allowsBackForwardNavigationGestures = YES; (self.allowsBackForwardNavigationGestures已經被禁用),重寫-[addGestureRecognizer:]方法,UIScreenEdgePanGestureRecognizer手勢進行強引用,把新添加的手勢禁用掉,

然后在allowsBackNavigationGestures和allowsForwardNavigationGestures的 SET 方法設置對應手勢的enabled屬性,

allowsBackForwardNavigationGestures分解

重寫-[addGestureRecognizer:]為避免其它UIScreenEdgePanGestureRecognizer手勢干擾,增加一個allowsBackNavigationGesturesSet屬性標記是否是由于allowsBackNavigationGestures設置導致,在[supersetAllowsBackForwardNavigationGestures:]方法執行前后進行allowsBackNavigationGesturesSet開關控制

allowsBackNavigationGesturesSet開關控制

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

addGestureRecognizer最終代碼

這樣就實現了allowsBackForwardNavigationGestures屬性的分解

使用場景
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容