2014-10-27 59 views
0

我已经成功实现了UIScreenEdgePanGestureRecognizer,并且我的方法被触发了,因为它应该这样做,但手势识别器的“边缘”属性永久设置为UIRectEdgeNone,尽管识别了正确的手势边缘设置为UIRectEdgeBottom。UIScreenEdgePanGestureRecognizer边缘属性未按预期方式设置

下面是我设置的识别器:

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

} 

这是非常简单的,但我需要测试边缘属性以查看哪个边缘被识别,上面的示例仅显示问题。我的实际代码库在每个边缘检测到,然后我需要进一步分解。

很明显,我可以通过触发不同的方法来解决这个问题,但我不希望在这种情况下。

有谁知道为什么这个属性没有设置我会如何预期?

非常感谢您的帮助。

回答

4

据我所知,尽管名称边缘,这必须设置为一个单一的边缘。因此,不需要检查哪个边被识别,因为swipeUpFromBottom只会在从底部向上滑动时触发。如果将代理设置为self,则可以将边缘设置为左侧的另一个UIScreenEdgePanGestureRecognizer添加到名为leftRecognizer的代码中,然后在代理方法中可以检查由此切换到哪个方向用户。

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

很酷,谢谢。我设置了个人识别器,但希望它们都指向相同的方法。我已经按照你的建议分解了这个问题,在我的脑海中,这只是一个多余的东西,但是现在没有关系。 – 2014-10-27 17:45:02

+0

属性名称是'边缘',并有'UIRectEdgeAll'。 Apple的文档中没有任何内容。 Apple给了什么? – bejado 2017-11-27 05:45:12