Длительное нажатие UIButton с пальцем - PullRequest
2 голосов
/ 22 февраля 2012

В моем проекте мне нужно использовать UIButton (или другой компонент) для обработки событий с помощью длинного нажатия.Позвольте мне объяснить, я должен подумать, что я удерживаю кнопку в таймере для подсчета секунд и освобождаю от остановки давления, я пытался с управлением UILongPressGestureRecognizer, но это не так, потому что я вспоминаю событие, когда кнопка удерживается, нотолько если я двигаю пальцем, но мне хотелось бы, чтобы таймер ушел и отсчитывал все время, в течение которого кнопка удерживается (с неподвижным пальцем) и перестает считать, когда палец отпущен.

Кто-нибудь знаеткак мне помочь?Спасибо

Ответы [ 2 ]

6 голосов
/ 22 февраля 2012

Используйте эти два метода для событий кнопок.touchDown вызывается при нажатии кнопки, а touchUp вызывается при снятии пальца с кнопки.Рассчитайте разницу во времени между этими двумя методами.Также вы можете запустить таймер в touchDown и остановить / перезапустить его в touchUp.

//connect this action with Touch up inside
- (IBAction)touchUp:(id)sender {
    NSLog(@"up");
}

//connect this to tocuh down
- (IBAction)touchDown:(id)sender{
    NSLog(@"down");
}

Обновлено В коде вы можете написать так

[btn addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
[btn addTarget:self action:@selector(touchDown:) forControlEvents:UIControlEventTouchDown];

и в xib enter image description here

0 голосов
/ 22 февраля 2012

То же самое я сделал ... Как вы сказали о UILongPressGestureRecognizer, я не могу этого понять ... но вы можете написать свой код внутри -(void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer { }. Я сделал то же самое с помощью этого метода и получил успешный результат .. :). Вам даже не нужно добавлять таймер, вместо этого вы можете использовать ...

 UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] 
                                      initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 1.0;
lpgr.delegate = self;

Я думаю, что это прекрасно работает ..

...