ios - UIScreenEdgePanGestureRecognizer 边缘属性未按预期设置

标签 ios objective-c uigesturerecognizer

我已经成功地实现了一个 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/

相关文章:

ios - 在 xcode 中设置 C 编译标志

javascript - 创建图像 查看显示更多

objective-c - 证书、配置文件、公钥/私钥揭秘

ios - 如何从graph api获取多张照片

Controller 上 slider 和平移手势之间的 iOS 手势碰撞

ios - 具有自动布局的 UIScrollView 平铺 subview

ios - 正确使用 NSThread 和 NSRunLoop

ios - 检测触摸次数

ios - UIView 水龙头识别器不工作

ios - 应用程序无法从 iCloud Drive 中的文档启动