2013-09-24 3 views
0

У меня есть UIView с двумя распознавателями жестов. Оба распознают кран двумя пальцами: один для верхней половины экрана, другой для нижней части экрана. В этом UIView у меня есть 4 кнопки, которые охватывают весь экран (каждая кнопка - четверть экрана).Подвижность UIButton распознавателя жестов

Я использую распознаватель жестов, чтобы определить, когда пользователь одновременно нажимает 2 кнопки, и я все еще хочу распознавать обычные касания кнопок.

Я настроил все, и он отлично работает. Однако при нажатии одним пальцем тень на кнопке появляется на Touch Up, а не на Touch Down. И это странно. Я пытался сменить задержкиTouchesBegan без успеха.

Есть ли способ иметь оба поведения? Обнаруживать прикосновения двумя пальцами, но иметь «нормальное поведение», когда есть только один палец? В противном случае я могу заставить нажатое состояние UIbutton?

Вот как мне настроить мои жесты:

-(void)initGestureRecognition{ 
    handClapTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handClapDetected:)]; 
    handClapTapGestureRecognizer.numberOfTouchesRequired = 2; 
    handClapTapGestureRecognizer.numberOfTapsRequired = 1; 
    handClapTapGestureRecognizer.cancelsTouchesInView = YES; 
    [self.gestureRecognitionView addGestureRecognizer:handClapTapGestureRecognizer]; 
    handClapTapGestureRecognizer.delegate = self; 


    jumpTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(jumpDetected:)]; 
    jumpTapGestureRecognizer.numberOfTouchesRequired = 2; 
    jumpTapGestureRecognizer.numberOfTapsRequired = 1; 
    jumpTapGestureRecognizer.cancelsTouchesInView = YES; 
    [self.gestureRecognitionView addGestureRecognizer:jumpTapGestureRecognizer]; 
    jumpTapGestureRecognizer.delegate = self; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 

    return NO; 
} 


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ 
    if ([gestureRecognizer isEqual:handClapTapGestureRecognizer] && [touch locationInView:self.view].y > self.view.frame.size.height/2) 
     return NO; 
    if ([gestureRecognizer isEqual:jumpTapGestureRecognizer] && [touch locationInView:self.view].y < self.view.frame.size.height/2) 
     return NO; 

    return YES; 
} 

Я знаю, что моя проблема аналогична той одной: UIButton inside a view that has a UITapGestureRecognizer но разница в том, что в моем случае, поведение нормально, и я просто пытаюсь получить тень на кнопке на Touch DOwn, а не на Touch Up.

Благодаря

ответ

1

Не могли бы вы вручную установить [button setHighlighted:YES] когда кран жест первым признан и его расположение совпадает с кнопки, а затем NO, когда жест заканчивается?

+0

Спасибо, это работает. Не знаю, почему я не думал об этом ... –

Смежные вопросы