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 只有一个方向工作

如何检测 UISwipeGestureRecognizer 的结束?

如何使 UISwipeGestureRecognizer 在 UIScrollView 中工作

UISwipeGestureRecognizer 没有触发