Отключение UIPinchGestureRecognizer с помощью setEnabled:NO

У меня есть распознаватель жестов, прикрепленный к моему scrollView (один поверх стандартного). Я пытаюсь включить и отключить его на определенных уровнях масштабирования, но это не работает. Я использую команды:

[self.pinchGesture setEnabled:NO];
and
[self.pinchGesture setEnabled:YES];

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

NSArray *gestures = [self.scrollView gestureRecognizers];
for (UIGestureRecognizer *gesture in gestures) {
    NSLog(@"%s, gesture: %@", __FUNCTION__, [gesture description]);
}

Я вижу, что для моего пользовательского жеста это выглядит так:

gesture: <UIPinchGestureRecognizer: 0x88a62d0; state = Possible; enabled = NO; view = <UIScrollView 0x880c360>; target= <(action=handlePinch

Таким образом, несмотря на то, что он установлен в enabled = NO, щипок по-прежнему вызывает метод handlePinch:. Есть причина для этого? Или мне нужно использовать [self.scrollView setGestureRecognizers:<#(NSArray *)#>, чтобы убрать этот жест щипка? Если я буду использовать этот подход, нужно ли мне перебирать мои жесты для scrollView, сохранять ссылки на них, а затем устанавливать их, чтобы я не возвращал свой собственный жест сжатия? Спасибо.


person Crystal    schedule 20.01.2012    source источник
comment
Вы включаете/отключаете сам вид прокрутки?   -  person Costique    schedule 20.01.2012
comment
@Costique Ой, извините, я не смотрел на свой код и не думал, я исправил фрагмент кода.   -  person Crystal    schedule 20.01.2012


Ответы (1)


Включенный вид прокрутки просто делает это: включает и отключает просмотр прокрутки. Распознаватель жестов — это другое животное, которое как бы привязано к вашему прокрутке, но ведет себя почти независимо. Почему бы не удалить цель для жеста вместо отключения, а затем снова добавить цель при включении? В качестве альтернативы установите логическое значение, которое ваш целевой метод проверяет и игнорирует жест, когда логическое значение равно YES.

person Owen Hartnett    schedule 20.01.2012
comment
Спасибо за совет. Я думал, что это сработает, но я попробовал оба метода, removeTarget и флаг BOOL, который проверяет мой метод handlePinch:, и я получаю нежелательное поведение. Собственные методы делегата scrollView, такие как scrollViewDidZoom: больше не вызываются. Когда мой метод handlePinch: вызывается, он проверяет BOOL и ничего не делает. Оттуда scrollViewDidZoom никогда не вызывается. Нужно ли мне куда-то передавать свой жест, чтобы он вызывался? - person Crystal; 21.01.2012
comment
В этом случае я бы полностью удалил распознаватель жестов, а затем снова добавил бы его, когда захочу. - person Owen Hartnett; 23.01.2012