Проблема с использованием UILongPressGestureRecognizer в пользовательском MKAnnotationView - PullRequest
1 голос
/ 15 сентября 2010

Возникли проблемы с UILongPressGestureRecognizer в пользовательском подклассе MKAnnotationView.Обратный вызов срабатывает только с перерывами.Если я уменьшу минимальную длительность PressDuration, она будет срабатывать чаще.При минимальном значении 0.1, он срабатывает каждый раз.При значении 0,4 он никогда не срабатывает, независимо от того, как долго я на нем держу палец.На уровне 0,2 это удар или промах.

Если я использую жест касания (как показано ниже), он работает нормально.Я использую жесты LongPress для других представлений, и они работают нормально.Эта проблема возникает только в MKAnnotationView, поэтому мне интересно, не мешают ли некоторые другие внутренние обратные вызовы событий в AnnotationViews (обратный вызов и т. Д.).

Я вижу эту проблему на iOS4 (sim и телефон) и 3.2 (сим, устройства нет).

Вот как я создаю распознаватель жестов:

#define USE_LONG_PRESS 1
#define USE_TAP 0
#if USE_LONG_PRESS
    UILongPressGestureRecognizer *longPressGR = 
    [[UILongPressGestureRecognizer alloc] initWithTarget:self 
                                                action:@selector(handleLongPress:)];
    longPressGR.minimumPressDuration = 0.2;
    [self addGestureRecognizer:longPressGR];
    [longPressGR release];
#endif
#if USE_TAP
    UITapGestureRecognizer *tapGR = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                action:@selector(handleTap:)];
    [self addGestureRecognizer:tapGR];
    [tapGR release];
#endif

И методы обратного вызова определены в этом классе какследует:

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"LONG PRESS");
}

- (void)handleTap:(UIGestureRecognizer *)gestureRecognizer {
    NSLog(@"TAP");
}

Любой iPhone-гуру знает, почему это может происходить?

1 Ответ

0 голосов
/ 15 сентября 2010

Насколько я знаю, к маркерам в 3.2 и iOS 4 уже прикреплен длинный жест нажатия для обработки перетаскивания маркера. Может быть, это мешает вашему распознавателю жестов при длинном нажатии? Может быть, поэтому работает более короткая продолжительность; он ловит жест, прежде чем встроенный распознаватель длинных нажатий может.

  • это всего лишь предположение *
...