Проблема с UITapGestureRecognizer для двойного нажатия - PullRequest
8 голосов
/ 10 мая 2011

У меня два UITapGestureRecognizer: singleTap и doubleTap, инициализированные двумя различными действиями.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
[singleTap requireGestureRecognizerToFail:doubleTap];
[doubleTap setNumberOfTapsRequired:2];
[imageView addGestureRecognizer:doubleTap];
[imageView addGestureRecognizer:singleTap];

Когда я запускаю свое приложение в симуляторе, один ответ реагирует правильно, но не двойной щелчок!Когда я ничего не нажимаю дважды, я полагаю, что доза iOS распознает двойное нажатие, потому что действие одного касания не вызывается (из-за [singleTap requireGestureRecognizerToFail:doubleTap];), но я не могу понять, почему оно не выполняет действие handleDoubleTap.

Ответы [ 2 ]

6 голосов
/ 28 июля 2011

У меня работает следующий код:

- (void)handleTap:(UIGestureRecognizer*)gr {
    NSLog(@"----------------- tap ----------------");
}
- (void)handleDoubleTap:(UIGestureRecognizer*)gr {
    NSLog(@"================= double tap ============");
}
- (XXXView*)createXXXView {
    XXXView *view = [[[XXXView alloc] init] autorelease];
    view.xxx=...;//irrelevant

    UITapGestureRecognizer *dtr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
    dtr.numberOfTapsRequired = 2;

    UIGestureRecognizer *tr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

    [tr requireGestureRecognizerToFail:dtr];
    [view addGestureRecognizer:tr];
    [view addGestureRecognizer:dtr];

    return view;
}
6 голосов
/ 10 мая 2011

Мне кажется, проблема в том, что UIImageView и UILabel переопределяют значение по умолчанию YES для свойства userInteractionEnabled и устанавливают его на NO.

Добавьте imageView.userInteractionEnabled = YES; и попробуйте снова.

...