2012-03-15 3 views
6

ребят,Два UILongPressGestureRecognizer, можно стрелять, а другие не могу

Я добавил два UILongPressGestureRecognizer. Я хочу, чтобы две кнопки были нажаты в течение 0,3 секунды, запустите «shortPressHandler». Если пользователь продолжает нажимать эти две кнопки еще на 1,2 секунды, запустите «longPressHandler». Теперь я получаю shortPressHandler, и longPressHandler никогда не запускался. Я думаю, это может произойти потому, что shortPressGesture распознается первым и longPressGesture никогда не получает шанс. Может ли кто-нибудь показать мне, как добиться того, чего я хочу? Заранее спасибо.

UILongPressGestureRecognizer *longPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressHandler:)] autorelease]; 
longPressGesture.numberOfTouchesRequired = 2; 
longPressGesture.minimumPressDuration = 1.5; 
longPressGesture.allowableMovement = 10; 
longPressGesture.cancelsTouchesInView = NO; 
longPressGesture.enabled = true; 
[self.view addGestureRecognizer:longPressGesture]; 

UILongPressGestureRecognizer *shortPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(shortPressHandler:)] autorelease]; 
shortPressGesture.numberOfTouchesRequired = 2; 
shortPressGesture.minimumPressDuration = 0.3; 
shortPressGesture.allowableMovement = 10; 
shortPressGesture.cancelsTouchesInView = NO; 
shortPressGesture.enabled = true; 
[self.view addGestureRecognizer:shortPressGesture]; 
+0

Спасибо. Знаете ли вы, что делать, если я также хочу, чтобы shortGesture срабатывал, даже если кнопки не были выпущены? – Globalhawk

+0

Извините, я не видел этого сообщения - если вы пишете его под своим сообщением, вам нужно обратиться к нему с помощью «@name ...», если я понимаю, что вы правы, вы хотите что-то вроде: нажатия на пользователя, shortPress увольняется после 0.3 секунд и если он не выпустит свою прессу, то длится долгота. Это верно? –

+0

@rokjarc Это точно, что я хочу. Благодарю. – Globalhawk

ответ

6

Вставьте эту строку перед добавлением shortPressGesture:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

Примечание: shortGesture не будет вызвана сразу же после 0,3 секунды удерживая но когда кран освобождено, если оно составляет от 0,3 секунд до 1,2 секунд длинных , Если кран длиннее 1,2 с (у вас в вашем коде есть 1,5 с, что, вероятно, опечатка), то только longPressGesture запустится.

EDIT:

Однако, если вы хотите, чтобы ваши обработчики событий как для огня (в случае длительной печати), вы должны сделать это:

Ваш UIView о том, следует осуществлять <UIGestureRecognizerDelegate> в .h файл.

В .m файле добавить этот метод:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 
} 

Теперь вместо добавления строки:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

Вы добавляете эти две строки:

shortPressGesture.delegate = self; 
longPressGesture.delegate = self; 

ПРИМЕЧАНИЕ: если у вас есть другие ссылки UIGestureRecognisers d к вашему UIVIew вам нужно будет добавить некоторую проверку в shouldRecognizeSimultaneouslyWithGestureRecognizer:, иначе вы можете просто вернуть YES.

+0

Это работает как шарм! Большое спасибо! :-) – Globalhawk

+0

@Globalhawk: добро пожаловать :) –

 Смежные вопросы

  • Нет связанных вопросов^_^