UIScreenEdgePanGestureRecognizer 从不触发操作

UIScreenEdgePanGestureRecognizer never fires action

我正在尝试检测是否继续拖过屏幕底部。我尝试使用 UIPanGestureRecognizer,但一旦手指到达屏幕边缘(顶部除外),它就会停止触发。现在我正在尝试 UIScreenEdgePanGestureRecognizer,但尽管 gestureRecognizer 委托方法 shouldReceiveTouch 触发,但手势本身的指定选择器从未触发。任何帮助将不胜感激。

此代码在 viewDidLoad:

UIScreenEdgePanGestureRecognizer *selectScreenEdgeDrag = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgeSelect:)];
[selectScreenEdgeDrag setEdges:UIRectEdgeBottom];
selectScreenEdgeDrag.delegate = self;
[self.view addGestureRecognizer:selectScreenEdgeDrag];

委托方法:

- (void)screenEdgeSelect:(UIScreenEdgePanGestureRecognizer *)gesture {
    NSLog(@"screenEdgeSelect");
}

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

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceivePress:(UIPress *)press {
    NSLog(@"shouldReceivePress");
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(nonnull UITouch *)touch {
    NSLog(@"shouldReceiveTouch");
    return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
  return NO;
}

我做错了什么?

谢谢。

它永远不会触发,因为您将 edges 属性 设置为 UIRectEdgeBottom 并且它与系统控制中心发生冲突。每当我试图从底部边缘滑动时,控制中心就会出现。如果您将 edges 设置为 UIRectEdgeLeftUIRectEdgeRight 一切都会正常。

如果您仍然需要使用底边手势,可以使用以下选项(据我所知):

  • 您可以隐藏状态栏 (UIStatusBar):在这种情况下,您的代码将按预期工作。隐藏状态栏后,控制中心不会自动出现。相反,小箭头将显示在底部边缘,让用户可以根据需要打开设置。但你应该小心,因为根据 Apple's guidelines:

Think twice before permanently hiding the status bar.

  • 您可以要求用户在 iOS 设置中禁用控制中心。但是,我猜,他们会很生气他们必须做这么辛苦的工作:(

希望此信息有用。