UISwipeGestureRecognizer 和 ShareExtension:iOS 12.4 和 13.0 和最新版本的不同行为(错误或未记录?)
Posted
技术标签:
【中文标题】UISwipeGestureRecognizer 和 ShareExtension:iOS 12.4 和 13.0 和最新版本的不同行为(错误或未记录?)【英文标题】:UISwipeGestureRecognizer and ShareExtension: Different behaviour on iOS 12.4 and 13.0 and latest (bug or undocumented?) 【发布时间】:2020-05-26 10:26:47 【问题描述】:我正在创建一个 Share 扩展程序,但在 ios 13.0 及更高版本的测试中遇到了奇怪的行为。我使用 UISwipeGestureRecognizer 来解释用户在我的扩展程序主视图上的滑动手势。
这个简单的代码在下面提供了一个我想要的示例,并且可以在 12.4 及更早版本上完美运行:
@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 模拟器上查看对应版本的差异。
也许有人解决了这个问题并且知道是什么原因或找到了它的描述 - 请分享结果。
谢谢。
【问题讨论】:
看起来同一个问题***.com/questions/56918410/… 【参考方案1】: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];
;
【讨论】:
【参考方案2】:您需要检查 .gestureRecognizers 属性以检查出了什么问题或发生了异常情况。
因为它是服务器手势识别。您需要尝试shouldRecognizeSimultaneouslyWith
方法,如下所示:
gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)
如果一切顺利,它会写成 True。
【讨论】:
以上是关于UISwipeGestureRecognizer 和 ShareExtension:iOS 12.4 和 13.0 和最新版本的不同行为(错误或未记录?)的主要内容,如果未能解决你的问题,请参考以下文章
识别用户剪切/滑动手势 (UISwipeGestureRecognizer)
UISwipeGestureRecognizer 只有一个方向工作
如何检测 UISwipeGestureRecognizer 的结束?