当客户端向左/向右滑动时,它应该调用我的代码(即从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 上分别使用属性allowsMagnification
和allowsBackForwardNavigationGestures
禁用放大手势和导航手势。
结合
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
应该按照你的要求去做。