Похоже, вы пытаетесь подключить один распознаватель жестов к нескольким кнопкам. Распознаватель жестов может быть прикреплен только к одному представлению за раз. Так что в вашем случае последняя кнопка, к которой вы подключаете распознаватель (кнопка B1), вероятно, реагирует на двойное нажатие, но A1 и A2 этого не делают.
Создайте отдельный распознаватель для каждой кнопки.
Но все три распознавателя могут вызывать один и тот же метод действия (handleDoubleTap:
).
Однако, когда вы попытаетесь сделать одно нажатие на кнопку, произойдет небольшая задержка, так как она ожидает, пока не начнется двойное нажатие. Существуют способы уменьшить задержку, но она может не стоить того, чтобы справиться с задержкой, и обходные пути поднимают другие проблемы.
Edit:
В своем комментарии вы говорите, что «хотите определить, нажаты ли они одновременно». Для этого вам не нужны распознаватели жестов. Вы можете просто использовать стандартные события управления.
Далее в IB для каждой кнопки подключите событие «Touch Down» с помощью buttonPressed:
. Или сделать это программно:
[button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button3 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
Далее, в IB, для кнопки каждая подключите «Touch Up Inside» и «Touch Up Outside» события с buttonReleased:
. Или, чтобы сделать это программно:
[button1 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button2 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
[button3 addTarget:self action:@selector(buttonReleased:) forControlEvents:UIControlEventTouchUpInside|UIControlEventTouchUpOutside];
Затем добавьте ivars, чтобы отслеживать, сколько или какие кнопки были нажаты:
@property (nonatomic) int numberOfButtonsBeingTouched;
@property (strong, nonatomic) NSMutableSet *buttonsBeingTouched; //alloc + init in viewDidLoad or similar
Если вам важно, сколько кнопок нажимать, вам не нужно NSMutableSet
.
Наконец, добавьте методы buttonPressed и buttonReleased:
- (IBAction)buttonPressed:(UIButton *)button {
self.numberOfButtonsBeingTouched++;
[self.buttonsBeingTouched addObject:button];
//your logic here (if (self.numberOfButtonsBeingTouched == 3) ...)
}
- (IBAction)buttonReleased:(UIButton *)button {
self.numberOfButtonsBeingTouched--;
[self.buttonsBeingTouched removeObject:button];
//your logic (if any needed) here
}