在 WkWebView 中拦截轻扫边缘



当客户端向左/向右滑动时,它应该调用我的代码(即从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

添加"多手势"支持似乎可以使其工作,尽管我宁愿完全取消 webkitview 手势控制,但我不知道如何。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

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

结合

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

应该按照你的要求去做。

相关内容

  • 没有找到相关文章

最新更新