UISwipeGestureRecognizer UIGestureRecognizerStateChanged не вызывается - PullRequest
0 голосов
/ 05 июня 2018

Я определяю два UISwipeGestureRecognizer в моем приложении:

UISwipeGestureRecognizer *swipeLeftVolume = [[UISwipeGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
swipeLeftVolume.direction = UISwipeGestureRecognizerDirectionLeft;
[self.playerView addGestureRecognizer:swipeLeftVolume];

UISwipeGestureRecognizer *swipeRightVolume = [[UISwipeGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
swipeRightVolume.direction = UISwipeGestureRecognizerDirectionRight;
[self.playerView addGestureRecognizer:swipeRightVolume];

В целевом методе у меня есть 3 состояния:

UIGestureRecognizerStateBegan
UIGestureRecognizerStateChanged
UIGestureRecognizerStateEnded

, и я заметил, что только UIGestureRecognizerStateEnded называется.

Есть идеи, в чем может быть проблема?я хочу распознать удар по конкретному UIView:

- (void)handleSwipeGestureVolume:(UISwipeGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Start");
    } else if (sender.state == UIGestureRecognizerStateChanged) {
        NSLog(@"Changed");
    } else if (sender.state == UIGestureRecognizerStateEnded) {
        NSLog(@"Finish");
    }
}

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Для любого распознавателя жестов, взаимодействие с пользователем должно быть включено для работы.Без него не будут запущены никакие жесты, включая touchBegan:, touchMove: и т. Д.

, поэтому вам нужно сделать [self.playerView setUserInteractionEnabled:TRUE];

И еще одну вещь, которую я хотел бы вам разрешитьЗнайте, что если вы реализовали touchBegan:, touchMove: и т. д., то метод будет запускаться сначала для жеста, а не UIGestureRecognizer шилдов.

0 голосов
/ 05 июня 2018

Похоже, вы запутались между UISwipeGestureRecognizer и UIPanGestureRecognizer.

UISwipeGestureRecognizer сгенерирует UIGestureRecognizerStateEnded только состояние , тогда как UIPanGestureRecognizer имеет оба желаемых состояния.

Если вам необходимо получить оба UIGestureRecognizerStateBegan, UIGestureRecognizerStateChanged, UIGestureRecognizerStateEnded, вместо этого используйте UIPanGestureRecognizer.

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]  initWithTarget:self action:@selector(handleSwipeGestureVolume:)];
[self.playerView addGestureRecognizer:panGesture];
0 голосов
/ 05 июня 2018

Убедитесь, что вы включили UserInteraction для self.playerView .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...