IOS: не распознается распознаватель

У меня есть сценарий, как показано ниже

  1. Прямо сейчас, я показываю только 1 представление с меткой 8. Но я планирую добавить еще 3 таких вида в HolderView.

  2. SmallerView/s создаются из других файлов Nib.

Я сделал этот код для добавления отображения Rec Recognizer для ViewController

UITapGestureRecognizer *tapRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapRecognized2:)];
[tapRecognizer setDelegate:self];
[self.view addGestureRecognizer:tapRecognizer];

Код для добавления Tap Recognizer в меньшие виды. Я добавил меньшие виды в HolderView. И назначил им идентификаторы тегов. После этого,

for (SmallerView *view in HolderView.subviews) { UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)]; [recognizer setDelegate:self];
NSLog(@"Added gesture to the view with tag: %ld",view.tag); [view addGestureRecognizer:recognizer];
}

3. - (void) tapRecognized: (UITapGestureRecognizer *) paramSender {NSLog (@"нажато на% ld", paramSender.view.tag); } }

- (void)tapRecognized2:(UITapGestureRecognizer *)paramSender
{ NSLog(@"VC view");
}
  1. Я включил UserInteraction (как в коде, так и в Inspector) для всех просмотров и UILabels на небольших представлениях.

Теперь проблема заключается в следующем: меньший вид распознавателя Tap не работает постоянно.Иногда они печатают вывод.Все внезапно распечатывает вывод распознавателя ViewController.Пожалуйста помоги

UPDATE: Ниже представлена диаграмма "Мой взгляд". Зеленая граница: (в UIView initWithFrame) d

self.layer.borderColor = [UIColor greenColor].CGColor;

Красная граница:

MyTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil] objectAtIndex:0];
self.myLabel.layer.borderColor=[UIColor redColor].CGColor;

Почему эта Зеленая граница идет только такого размера?Разве это не должно быть полной площади?И этот жест работает только тогда, когда я коснусь зеленой зоны.Зачем?

3 ответа

Я назначил новый фрейм кадра, который имел неправильные границы. Это помогло правильно понять жесты.


Кажется, что у вас есть распознаватель жестов при взгляде на вид, а также распознаватель жестов в своем супервизоре. Способ распознавания жестов заключается в том, что по умолчанию оба они будут кандидатами на признание крана. Если это не то, что вы хотите, вам нужно предотвратить это.

Ты можешь:

  • установить связь "вы-первый" между распознавателями жестов или

  • вы можете использовать своих делегатов, чтобы помочь решить их, или

  • вы можете настроить подвью, чтобы он не распознал распознаватель жестов распознавания.

У вас много вариантов!

Но если вы не сделаете ни одного из них, то оба распознавателя жестов вида и его распознаватель жестов распознавания будут пытаться распознать.


Возможно, лучшим решением было бы просто добавить один tapGestureRecognizer в родительский вид.

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]init];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[tap addTarget:self action:@selector(handleTap:)];
[holderView addGestureRecognizer:tap];

Затем добавьте целевой метод

- (void) handleTap:(UITapGestureRecognizer *)tap { UIView * holderView; CGPoint tapPoint = [tap locationInView:holderView]; for (UIView * v in holderView.subviews) { if (CGRectContainsPoint(v.frame, tapPoint)) { // v is the subview that was pressed. // add your code here. break; } }
}

licensed under cc by-sa 3.0 with attribution.