2012-10-05 3 views
0

Так что я относительно новичок в Objective-C, и есть определенная возможность. Я пропускаю что-то довольно очевидное, поэтому не стесняйтесь бросать помидоры, если так. Вот моя проблема:UILongPressGesture minimumPressDuration

У меня есть приложение для iPhone с одним представлением, состоящее из одного MapView. Я включил распознаватель жестов с длинным нажатием на то, что MapView, чтобы аннотировать/удалить булавку. Оказывается, что это будет работать, если я не указать minimumPressDuration ...

- (void)viewWillAppear:(BOOL)animated { 
    UILongPressGestureRecognizer * longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
    [mapView addGestureRecognizer:longPressRecognizer]; // Actual map view handler is added to 

    ... 

} 

-(void) handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { 
    NSLog (@"Did it work?!"); 
    // Some code here to make pins appear; omitted for simplicity in this question 
} 

Как и следовало ожидать, когда я долго нажмите на карту, после 0.5 секунд (время по умолчанию) у меня будет 1 булавку на карте. Если я передвигаюсь по моему пальцу, у меня есть крючок булавки. Журнал также распечатывает «Это работало ?!» много раз снова и снова. Опять же, ожидается. Однако, когда я добавить одну маленькую строку метода viewWillappear (прямо перед сообщениями addGestureRecognizer MAPview в):

longPressRecognizer.minimumPressDuration = 1.0; 

... жест больше не работает. В этом случае я удерживаю нажатой в течение 1 секунды, и ничего не появляется в журнале. Отпустите, попробуйте дольше одной секунды ... ничего. Никакие булавки не отбрасываются, и ничего не распечатывается в журнале. Почему это происходит? Я не понимаю, почему установка минимальной продолжительности нарушит это. Я ожидаю, что это должно функционировать так же, как и раньше - без минимальной продолжительности нажатия на таможне - с той лишь разницей, что мне нужно удерживать 1 полную секунду вместо половины одной.

Обновление: выясняется, что если я выберу значения между 0.1 и 0.5 включительно, он будет работать. Но как только я иду на 0.6 или выше, он не работает. Что-то происходит под капотом в Obj-C, о котором я не знаю?

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

Спасибо!

P.S., используя OS X 10.8.2 и Xcode 4.5.1 (4G1004).

+1

Установка минимального значенияPressDuration на любое значение (в том числе больше 0,6) работает в моем тесте (в iOS 5 и 6). Проверка состояния (которое вам нужно сделать) не будет устранять проблему, которую вы описываете, поскольку метод обработчика распознавателя (где вы проверяете состояние) даже не вызывает вызов. – Anna

ответ

3

Я столкнулся с той же проблемой. После того, как делегат установленного распознавателя и одновременно включит его, эта проблема решена. Ниже приведен мой код для справки:

- (void)init 
{ 
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(lockLongPress:)]; 
    longPressGestureRecognizer.minimumPressDuration = 1.0; 
    longPressGestureRecognizer.delegate = self; 
    [targetView addGestureRecognizer:longPressGestureRecognizer]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
Смежные вопросы