Пользовательские действия для UIGestureRecognizer (с пользовательскими параметрами) - PullRequest
3 голосов
/ 18 февраля 2011

Краткая версия моей проблемы:

Я не могу понять, как заставить "действие" для моего UITapGestureRecognizer принять дополнительные параметры и фактически использовать их.

Вот краткое изложение моей проблемы:

Я пытаюсь сделать так, чтобы мое приложение для iPad записывало (с помощью NSLog) координаты UITouch, которые появляются всякий раз, когда они нажимают одну из кнопок UIB моего приложения. Расположение касания должно быть относительно кнопки, к которой вы прикоснулись.

Что я сделал:

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

У меня сейчас есть этот код:

 UITapGestureRecognizer *iconClickRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(logIcon:withTag:)];
 [iconClickRecognizer setNumberOfTapsRequired:1];
 [iconClickRecognizer setNumberOfTouchesRequired:1];
 [iconClickRecognizer setDelegate:self];
 [[self.view viewWithTag:1] addGestureRecognizer:iconClickRecognizer];

 [iconClickRecognizer release];

Когда я узнаю, что это работает, я буду использовать цикл for для добавления iconClickRecognizer ко всем кнопкам по их тегам.

Здесь показан logIcon: (int) withTag :

-(void)logIcon:(UIGestureRecognizer *)gestureRecognizer withTag:(int)tag {
  NSLog(@"tag X: %f", [gestureRecognizer locationInView:(UIView*)[self.view viewWithTag:tag]].x);
  NSLog(@"tag Y: %f", [gestureRecognizer locationInView:(UIView*)[self.view viewWithTag:tag]].y);
}

Что не работает:

Когда я жестко кодирую тег в методе logIcon, он правильно записывает информацию. Тем не менее, Я не знаю, как сделать этот метод динамическим , и на самом деле использовать параметр "тег".

Любая помощь будет принята с благодарностью.

Спасибо, Alex

Ответы [ 2 ]

8 голосов
/ 18 февраля 2011

Проблема в том, что вы можете получить только один аргумент при регистрации цели / стиля действия, то есть отправителя (в данном случае самого распознавателя жестов). Вы не можете передать произвольный контекст. Но вы могли бы в своем действии проверить свойство view распознавателя и проверить tag.

этого представления.
4 голосов
/ 18 февраля 2011

Документы для класса UIGestureRecognizer указывают, что действие должно быть в форме:

- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

, а не в вашей форме:

- (void)logIcon:(UIGestureRecognizer *)gestureRecognizer withTag:(int)tag

Таким образом, вы можете спросить gestRecognizer, где оно находитсяво всем окне, затем сравните с вашими кнопками, или вы можете пройтись по кнопкам и спросить жест, где он находится относительно каждой кнопки.

Вероятно, лучше всего было бы создать подкласс UIButton и сделать каждую кнопку самойцель;тогда вы точно знаете, в каком виде вы находитесь.

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