我正在创建一个Share扩展,在iOS 13.0和更高版本的测试中遇到了一个奇怪的行为,我使用了UISwipeGestureRecognizer和ShareExtension。我使用 UISwipeGestureRecognizer(图形识别器) 来解释用户在我的扩展的主视图上的滑动手势。
下面提供的这段简单的代码是我想要的一个例子,在12.4和更老的版本上工作得很完美,在iOS 13.0和更新的版本上,它没有任何记录。
@interface ShareAndSwipeRootController ()
@end
@implementation ShareAndSwipeRootController
- (void)loadView {
[super loadView];
[self.view setBackgroundColor:[UIColor redColor]];
[self.view setUserInteractionEnabled:YES];
UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUpGestureRecognizer];
UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDownGestureRecognizer];
};
-(void) swipeUp:(UISwipeGestureRecognizer *)recognizer {
NSLog(@"SWIPE Up");
}
-(void) swipeDown:(UISwipeGestureRecognizer *)recognizer {
NSLog(@"SWIPE Down");
}
@end
在iOS 13.0和更新版本上,它没有任何记录。你可以在iOS模拟器上检查相应版本的差异。
也许有人解决了这个问题,知道是什么原因,或者找到了它的描述 - 请分享结果。
谢谢。
你需要检查.gestureRecognizers属性,以检查出了什么问题或发生了什么异常。
因为它是一个服务器手势识别器。shouldRecognizeSimultaneouslyWith
方法,如下图所示。
gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
如果一切顺利,就会写成True.
Vlad,这段代码在我的模拟器和设备(13.5)上工作得很好,但我建议你用不同的方法。
它是一个有点沉重的手来实现 loadView
如果你这样做,你不应该打电话 super
在这个方法中。
为什么不把你的代码原封不动地移到 viewDidLoad
你通常在哪里附加手势?所以删除 loadView
并做
- (void)viewDidLoad {
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor redColor]];
[self.view setUserInteractionEnabled:YES];
UISwipeGestureRecognizer *swipeUpGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUp:)];
swipeUpGestureRecognizer.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:swipeUpGestureRecognizer];
UISwipeGestureRecognizer *swipeDownGestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDown:)];
swipeDownGestureRecognizer.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:swipeDownGestureRecognizer];
};