UIScreenEdgePanGestureRecognizer触发多次

时间:2014-10-07 20:28:24

标签: ios objective-c uigesturerecognizer

我在UIViewController上的viewDidLoad中有以下代码:

UIScreenEdgePanGestureRecognizer *edgeRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightEdgeSwipe:)];
edgeRecognizer.edges = UIRectEdgeRight;
[self.view addGestureRecognizer:edgeRecognizer];

目的是在检测到右边缘手势时触发视图滑入。

-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender
{
NSLog(@"Showing Side Bar");
[self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight];
}

但是我看到“handleRightEdgeSwipe”功能被多次触发 - 有时是5次,这使侧栏视图可以平滑地动画滑入闪光灯多次。

(注意:我尝试触发视图从UIButton显示,并且工作正常)。

为什么右边手势会多次触发,我该如何解决?

2 个答案:

答案 0 :(得分:18)

如上所述,随着GestureRecognizer状态的变化,UIScreenEdgePanGestureRecognizer会多次调用您的操作。请参阅 UIGestureRecognizer 类的状态属性的文档。所以,在你的情况下,我相信你正在寻找的答案是检查状态是否“结束”。因此:

-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender
{
    if (sender.state == UIGestureRecognizerStateEnded)
    {
        NSLog(@"Showing Side Bar");
        [self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight];
   }
}

答案 1 :(得分:3)

此手势不是单次拍摄事件,而是连续拍摄。

每当handleRightEdgeSwipe:发生变化或触摸移动时,都会调用{p> sender.state一次。您必须移动UIButton,具体取决于手势statelocationInView: