我在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次,这使得侧边栏视图本应平滑地滑动到flash多次。
(注意:我尝试触发视图以从UIButton显示,它工作得很好)。
为什么右边缘手势被多次触发,我如何修复它?
发布于 2014-10-11 06:53:37
如前所述,当GestureRecognizer的状态改变时,UIScreenEdgePanGestureRecognizer会多次调用您的操作。有关UIGestureRecognizer类的状态属性,请参见文档。因此,在您的情况下,我相信您正在寻找的答案是检查状态是否“结束”。因此:
-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender
{
if (sender.state == UIGestureRecognizerStateEnded)
{
NSLog(@"Showing Side Bar");
[self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight];
}
}
发布于 2014-10-08 04:32:48
这个手势不是单发事件,而是连续的。
每当sender.state
发生变化或触摸移动时,都会调用一次handleRightEdgeSwipe:
。你必须根据手势的state
和locationInView:
来移动UIButton
。
https://stackoverflow.com/questions/26244690
复制相似问题