ios - UIScreenEdgePanGestureRecognizer 触发多次

标签 ios objective-c uigesturerecognizer

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

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

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

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

但我看到“handleRightEdgeSwipe”函数被触发了多次 - 有时触发了 5 次,这使得应该平滑动画的侧边栏 View 滑入并闪烁多次。

(注意:我尝试触发 View 从 UIButton 出现,它工作正常)。

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

最佳答案

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

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

关于ios - UIScreenEdgePanGestureRecognizer 触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26244690/

相关文章:

ios - "' 当通过手势识别器呈现 View Controller 时,应用程序试图以模态方式呈现事件 Controller

ios - UITableView:找不到向上移动/对齐 tableIndex 元素的方法

ios - 无法将类型 'NSMutableDictionary' 的值转换为预期的参数类型 '[String: AnyObject]?'

ios - 在触摸事件上识别 CALayer(将功能代码移植到 Swift)

uigesturerecognizer - 检测 UILabel 上的触摸事件

swift - 我设法转到一个空白的 View Controller 。我该如何返回?

ios - 静态单元格中 UITableViewCell 中 UIDatePicker 的高度中断

iphone核心数据保存时出现 Unresolved 错误

ios - 如何在我的 Swift 类中使用 Objective-c 方法

iphone - 如何将字体嵌入到UIWebview中显示的PDF文件中?