需求是 UITableView 里面嵌套一個 WKWebView 用于展示 商品詳情的圖片问裕。圖片需要有雙指放大效果。于是就涉及到了兩個 UIScrollView 的滑動手勢沖突問題差油。
1窘面、剛開始想出的方案是通過設(shè)置 scrollEnabled 或者 bounces = NO 來調(diào)整 哪個 scrollView 響應(yīng)事件,在高系統(tǒng)版本上還好的止,但是在 iOS8上就不行了,一旦 webView 接收到 了滑動事件着撩,不管怎么調(diào)整诅福,都不會再響應(yīng)到 tableView 上了。
2拖叙、然后又想通過 設(shè)置 UIScrollView 的滑動手勢的 delegate氓润,來控制哪個先響應(yīng)。但是 UIScrollView 的 panGesture 的 delegate 必須設(shè)置為 scrollView 自己薯鳍,于是繼承 UITableView咖气,來重載 panGesture 的 delegate 方法。但是繼承后 發(fā)現(xiàn)這些 方法 雖然 可以調(diào)用到辐啄,但是調(diào)用 super 是個問題采章。而且繼承 WKWebView 里面的 scrollView 也不敢去嘗試运嗜,害怕WK對它有做不知道的設(shè)置壶辜。于是此方案也是行不通。
3担租、最后在翻看 SDK 時砸民,發(fā)現(xiàn) UIView
居然有一個 gesture
的 delegate
方法:
// called when the recognizer attempts to transition out of UIGestureRecognizerStatePossible if a touch hit-tested to this view will be cancelled as a result of gesture recognition
// returns YES by default. return NO to cause the gesture recognizer to transition to UIGestureRecognizerStateFailed
// subclasses may override to prevent recognition of particular gestures. for example, UISlider prevents swipes parallel to the slider that start in the thumb
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer NS_AVAILABLE_IOS(6_0);
于是就用 swizzle
直接把這個方法弄出來,然后再這里針對兩個 scrollView 做出對應(yīng)的判斷就好了奋救。發(fā)現(xiàn)效果還可以岭参,能夠接收。
哎尝艘,原來方法是如此簡單演侯。把 UIView 的 常用方法都給忘了。這里記錄下背亥,希望以后不要再忘了秒际。