拦截WkWebView中的滑动边缘

时间:2017-03-19 23:06:16

标签: ios objective-c cocoa-touch uigesturerecognizer wkwebview

当客户端向左/向右滑动时,Wihin webview应该调用我的代码(即从handleRightEdgeGesture打印日志)。它不会发生。那是为什么?

这是我到目前为止的代码。

#import "ViewController.h"
@import App;
@interface ViewController ()
@end


@interface ViewController () <UIGestureRecognizerDelegate> {
    CGFloat _centerX;
}


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];


    // track swipe left/right gestures

    UIScreenEdgePanGestureRecognizer *leftEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftEdgeGesture:)];
    leftEdgeGesture.edges = UIRectEdgeLeft;
    leftEdgeGesture.delegate = self;
    [self.view addGestureRecognizer:leftEdgeGesture];

    UIScreenEdgePanGestureRecognizer *rightEdgeGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightEdgeGesture:)];
    rightEdgeGesture.edges = UIRectEdgeRight;
    rightEdgeGesture.delegate = self;
    [self.view addGestureRecognizer:rightEdgeGesture];

    // launch the webview

     self.productURL = @"http://localhost:3010";

     NSURL *url = [NSURL URLWithString:self.productURL];
     NSURLRequest *request = [NSURLRequest requestWithURL:url];

     _webView = [[WKWebView alloc] initWithFrame:self.view.frame];
     //_webView.allowsBackForwardNavigationGestures = TRUE;
     [_webView loadRequest:request];
     _webView.frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height);
   // add the gesture trackers to the webview 
    [_webView addGestureRecognizer:rightEdgeGesture];
    [_webView addGestureRecognizer:leftEdgeGesture];
    [self.view addSubview:_webView];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (void)handleLeftEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture {
    // Get the current view we are touching
    if(UIGestureRecognizerStateBegan == gesture.state ||
       UIGestureRecognizerStateChanged == gesture.state) {
        // CGPoint translation = [gesture translationInView:gesture.view];
        NSLog(@"DEBUG: gesture left complete %@", nil);
    } else {  // cancel, fail, or ended
        // reset
        NSLog(@"DEBUG: gesture left reset %@", nil);
    }
}

- (void)handleRightEdgeGesture:(UIScreenEdgePanGestureRecognizer *)gesture {

    // Get the current view we are touching

    if(UIGestureRecognizerStateBegan == gesture.state ||
       UIGestureRecognizerStateChanged == gesture.state) {
      //  CGPoint translation = [gesture translationInView:gesture.view];
        // gensture complete?

        NSLog(@"DEBUG: gesture right complete %@", nil);
    } else {  // cancel, fail, or ended
        // reset
        NSLog(@"DEBUG: gesture right reset %@", nil);

    }

}



@end

2 个答案:

答案 0 :(得分:1)

添加“多手势”支持似乎使它工作,但我宁愿完全取消webkitview手势控制,但我不知道如何。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    return YES;
}

答案 1 :(得分:0)

您应该能够在WKWebView上分别使用属性allows​Magnificationallows​Back​Forward​Navigation​Gestures禁用放大手势和导航手势。

结合使用
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    return YES;
}

应该做你要问的事。