Adicionar um UIPanGestureRecognizer e um UISwipeGestureRecognizer à mesma exibição causa conflitos após a configuração de requireGestureToFail
Adicionei um reconhecedor de gesto de furto e um reconhecedor de gesto de panorâmica à mesma exibição. Esses gestos devem ser exclusivos um do outro.
Para fazer isso, adicionei a restrição no gesto de furto
[swipeGesture requireGestureToFail:panGesture];
(porque o gesto de pan deve ter precedência)
O problema é que o gesto de deslocamento é sempre invocado - mesmo durante um furto muito rápido.
Para superar isso, eu me pus como delegado do gesto de pan. No método delegado, configurei um código da seguinte maneira:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// check if it is the relevant view
if (gestureRecognizer.view == self.myViewWithTwoGestures)
{
// check that it is the pan gesture
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
{
UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
CGPoint velocity = [pan velocityInView:gestureRecognizer.view];
// added an arbitrary velocity for failure
if (ABS(velocity.y) > 100)
{
// fail if the swipe was fast enough - this should allow the swipe gesture to be invoked
return NO;
}
}
}
return YES;
}
Existe uma velocidade sugerida para garantir um bom comportamento? Existe outra maneira de forçar o gesto de pan a falhar?