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
设置为 UIRectEdgeLeft
或 UIRectEdgeRight
一切都会正常。
如果您仍然需要使用底边手势,可以使用以下选项(据我所知):
- 您可以隐藏状态栏 (
UIStatusBar
):在这种情况下,您的代码将按预期工作。隐藏状态栏后,控制中心不会自动出现。相反,小箭头将显示在底部边缘,让用户可以根据需要打开设置。但你应该小心,因为根据 Apple's guidelines:
Think twice before permanently hiding the status bar.
- 您可以要求用户在 iOS 设置中禁用控制中心。但是,我猜,他们会很生气他们必须做这么辛苦的工作:(
希望此信息有用。
我正在尝试检测是否继续拖过屏幕底部。我尝试使用 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
设置为 UIRectEdgeLeft
或 UIRectEdgeRight
一切都会正常。
如果您仍然需要使用底边手势,可以使用以下选项(据我所知):
- 您可以隐藏状态栏 (
UIStatusBar
):在这种情况下,您的代码将按预期工作。隐藏状态栏后,控制中心不会自动出现。相反,小箭头将显示在底部边缘,让用户可以根据需要打开设置。但你应该小心,因为根据 Apple's guidelines:
Think twice before permanently hiding the status bar.
- 您可以要求用户在 iOS 设置中禁用控制中心。但是,我猜,他们会很生气他们必须做这么辛苦的工作:(
希望此信息有用。