2014-10-07 4 views
7

У меня есть следующий код в viewDidLoad на UIViewController:UIScreenEdgePanGestureRecognizer Срабатывание Несколько раз

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, и он отлично работает).

Почему жест правой стороны срабатывает несколько раз и как я могу ее исправить?

+1

Если вы хотите, чтобы он перемещался, а не таскался пальцем, вместо этого вы должны использовать UISwipeGestureRecognizer. Он распознает одно событие, а не непрерывное движение. – rdelmar

+0

@rdelmar Я только хочу, чтобы вызвать по краю салфетки. Как я могу использовать UISwipeGestureRecognizer на правом краю? – motionpotion

+0

В методе действий вам нужно посмотреть на значение locationInView :, и только инициировать действие, если значение x этого местоположения находится в пределах области, которую вы хотите. – rdelmar

ответ

3

Этот жест не является событием с одним выстрелом, но непрерывным.

handleRightEdgeSwipe: вызывается один раз, когда sender.state изменяется или касание перемещается. Вы должны переместить UIButton в зависимости от жестов state и locationInView:.

+0

У вас есть пример для вашего ответа? Я хочу только запустить на правом краю. – motionpotion

+0

Вот [учебник] (http://iphonedev.tv/blog/2014/3/21/screen-edge-swipe-gesture-on-iphone-using-the-uiscreenedgepangesturerecognizer-tutorial) с [источниками на GitHub] (https://github.com/PaulSolt/UIScreenEdgePanGestureDemo), который должен вам помочь. – fluidsonic

16

Как отмечено, UIScreenEdgePanGestureRecognizer вызывает ваше действие несколько раз по мере изменения состояния GestureRecognizer. См. Документацию для состояние объекта UIGestureRecognizer класс. Итак, в вашем случае я считаю, что ответ, который вы ищете, - это проверить, закончилось ли состояние. Таким образом:

-(void)handleRightEdgeSwipe:(UIGestureRecognizer*)sender 
{ 
    if (sender.state == UIGestureRecognizerStateEnded) 
    { 
     NSLog(@"Showing Side Bar"); 
     [self presentPanelViewController:_lightPanelViewController withDirection:MCPanelAnimationDirectionRight]; 
    } 
} 
Смежные вопросы