Как запустить распознаватель жестов, когда жест уже активен?

У меня есть Subview A (self.thumbnailImageView), добавленный в мой супервизор. Я добавил UILongPressGestureRecognizer и UISwipeGestureRecognizer в свое подпредставление A.

[self addLongPressGestureRecognizerForPreviewCell:self.thumbnailImageView];

[self addSwipeUpGestureRecognizerForImageView:self.thumbnailImageView];

Теперь в методах обработчика, когда начинается состояние UILongPressGestureRecognizer, я добавляю Subview B (bigPreviewImage) в свой superview (self.view).

-(void)tapGesture:(UILongPressGestureRecognizer *)recognizer{

 if (recognizer.state == UIGestureRecognizerStateBegan)
 {
    // Long press detected, start the timer
    [self showPreviewImage:recognizer];
 }
 else if(recognizer.state == UIGestureRecognizerStateEnded)
 {
    [self hidePreviewImage];
 }
}

-(void)showPreviewImage:(UILongPressGestureRecognizer *)recognizer{

    UIImageView *bigPreviewImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Desktop"]];

    bigPreviewImage.frame = CGRectMake(self.thumbnailImageView.frame.origin.x - 50.0, self.thumbnailImageView.frame.origin.y + self.thumbnailImageView.frame.size.height + 10.0, 300.0, 250.0);
    bigPreviewImage.tag = 10000;//200.0 & 125.0
    [bigPreviewImage setUserInteractionEnabled:YES];

    [self.view addSubview:bigPreviewImage];
} 

Теперь, когда UILongPressGestureRecognizer активен, а пользователь пальцем все еще нажимает Subview A, если пользователь проводит пальцем вверх по экрану, я хочу, чтобы SwipeGestureRecognizer инициировался. Но этого же не происходит. Как запустить распознаватель жестов, когда жест уже активен?

Я реализовал метод shouldRecognizeSimultaneouslyWithGestureRecognizer, но метод смахивания вверх по-прежнему не вызывается. Пожалуйста, дайте мне знать, если я что-то упустил.


person Pradeep Reddy Kypa    schedule 18.05.2016    source источник


Ответы (1)


Понятно!!!

Нам не нужен отдельный распознаватель жестов смахивания. Для обработки этого сценария можно использовать различные состояния в распознавателе жестов длительного нажатия.

Жест длительного нажатия имеет разные состояния, такие как UIGestureRecognizerStateBegan, UIGestureRecognizerStateChanged и UIGestureRecognizerStateEnded.

  • UIGestureRecognizerStateBegan вызывается, как только вы долго нажимаете на подвид.

  • UIGestureRecognizerStateChanged вызывается, когда пользователь пытается пошевелить пальцем.

  • UIGestureRecognizerStateEnded вызывается, когда пользователь убирает палец с точки касания.


-(void)longPressGestureForPreviewImageView:(UILongPressGestureRecognizer *)recognizer{

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        // Long press detected, start the timer
        [self showPreviewImage:recognizer];
    }
    else if(recognizer.state == UIGestureRecognizerStateChanged)
    {
        NSLog(@"Swipe up");

        if ([self.thumbnailImageView.gestureRecognizers containsObject:recognizer]) {
            [self.thumbnailImageView removeGestureRecognizer:recognizer];
        }
    }
    else if(recognizer.state == UIGestureRecognizerStateEnded)
    {
        [self hidePreviewImage];
    }

Таким образом, мы можем использовать методы Gesture Delegate для обработки смахивания вместе с распознавателем жестов длительного нажатия.

person Pradeep Reddy Kypa    schedule 25.05.2016