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