UIScreenEdgePanGestureRecognizer边缘属性未按预期设置

时间:2014-10-27 12:19:45

标签: ios objective-c uigesturerecognizer

我已经成功实现了一个UIScreenEdgePanGestureRecognizer,我的方法会被触发,但是" edge"尽管通过设置为UIRectEdgeBottom的边缘识别出正确的手势,手势识别器的属性仍永久设置为UIRectEdgeNone。

以下是我对识别器的设置:

- (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
    }

}

它很直接,除了我需要测试边缘属性以查看哪个边缘被识别,上面的示例仅演示了该问题。我的实际代码库在每个边缘检测到,然后我需要进一步分解它。

显然我可以通过触发不同的方法来解决这个问题,但在这种情况下我不愿意这样做。

有谁知道为什么这个属性没有设定我的预期?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

据我所知,尽管名称边缘,但必须将其设置为单个边缘。因此,无需检查哪个边缘被识别,因为只有从底部向上滑动时才会触发swipeUpFromBottom。如果将委托设置为self,则可以将另一个UIScreenEdgePanGestureRecognizer添加到视图,边缘设置为left,名为leftRecognizer,然后在委托方法中,您可以检查用户通过此方向滑动的方向。

-(BOOL)gestureRecognizerShouldBegin:(UIScreenEdgePanGestureRecognizer *)g
{
   if (g == leftRecognizer) {
     //swiped left.
   } else if (g == r) {
     //swiped down.
   }
}