我已经成功地实现了一个 UIScreenEdgePanGestureRecognizer,并且我的方法被触发了,但是手势识别器的“边缘”属性永久设置为 UIRectEdgeNone,尽管正确的手势被识别为边缘设置为 UIRectEdgeBottom。
下面是我的识别器设置:
- (void)setupEdgeRecogniser {
UIScreenEdgePanGestureRecognizer* r = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpFromBottom:)];
r.minimumNumberOfTouches = 1;
r.maximumNumberOfTouches = 1;
r.delaysTouchesBegan = YES;
r.delegate = self;
[r setEdges:UIRectEdgeBottom];
}
这是在我期望的时候准确执行的方法:
- (void)swipeUpFromBottom:(UIScreenEdgePanGestureRecognizer*)gestureEvent {
// fault occurs here! gestureEvent.edges is always UIRectEdgeNone
if (gestureEvent.edges == UIRectEdgeBottom) {
// do some stuff
}
}
这很简单,只是我需要测试 edges 属性以查看识别了哪条边,上面的示例仅演示了这个问题。我的实际代码库会检测每个边缘,然后我需要进一步分解它。
显然我可以通过触发不同的方法来解决这个问题,但我不想在这种情况下这样做。
有谁知道为什么这个属性没有按照我的预期设置?
预先感谢您的帮助。
最佳答案
据我所知,尽管名称为边,但必须将其设置为单边。因此无需检查哪条边被识别,因为 swipeUpFromBottom 只会在从底部向上滑动时触发。您可以向 View 添加另一个 UIScreenEdgePanGestureRecognizer 并将边缘设置为左侧,命名为 leftRecognizer,如果您将委托(delegate)设置为 self,则在委托(delegate)方法中您可以检查用户向哪个方向滑动。
-(BOOL)gestureRecognizerShouldBegin:(UIScreenEdgePanGestureRecognizer *)g
{
if (g == leftRecognizer) {
//swiped left.
} else if (g == r) {
//swiped down.
}
}
关于ios - UIScreenEdgePanGestureRecognizer 边缘属性未按预期设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26587443/