iPhone - GestureRecognizer иногда не срабатывает? - PullRequest
3 голосов
/ 22 июня 2011

Я пытаюсь получить долгое нажатие клавиши на кнопке, работающей в объективе c для iPhone.

Вот код, который я собрал для GestureRecognizer:

    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    longPressGesture.minimumPressDuration = 1.0; //1 second
    longPressGesture.delegate = self;
    [deleteButton addGestureRecognizer:longPressGesture];
    [longPressGesture release];

Ивот функция, которую я использую в селекторе для вызова при обнаружении длительного нажатия клавиши.

-(void)handleLongPress:(UILongPressGestureRecognizer *) gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        NSLog(@"Got handle long key press");
        NumLabel.text = @"";

    }

}

Я также добавил следующие функции как часть моего класса делегата, но, похоже, они не имеютоказал какое-либо влияние:

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{

    return YES;
}

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

    return NO;

}

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{

    return YES;

}

Моя проблема в том, что это иногда работает, но иногда снова не работает, большую часть времени я получаю вызов handleLongPress, и он отлично работает, но очень часто, когда кнопкая нажимаю и удерживаю, пока ничего не получу, пока не оторву палец от кнопки, и на этом этапе мой обычный код кнопки будет запущен.

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

РЕДАКТИРОВАТЬ

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

Я предполагаю, что это потому, что она распознает ее какотдельный жест?Есть ли способ убедиться, что handleLongPress вызывается, пока кнопка удерживается нажатой, даже если палец вообще перемещается по кнопке?

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Распознаватели жестов предназначены только для прикосновений, а не для состояний кнопок.Долгое нажатие на самом деле просто нажатие и отпускание.Когда движение коснется, жест будет отменен!Если вы просто хотите узнать, была ли нажата ваша кнопка более определенного времени, вы можете обработать события TouchDown / TouchCancel вашей кнопки и добавить немного времени.

0 голосов
/ 12 января 2012

Да, мы можем реализовать распознаватель жестов вместе с кнопками. здесь это идет:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressButton:)]; [someButtonName addGestureRecognizer:longPress]; longPress.minimumPressDuration = 2.0; //longPress.delegate = self; [longPress release];

используйте его там, где вы создаете кнопку, в методе, в котором вы хотите ее реализовать. И затем

- (void)longPressButton:(UILongPressGestureRecognizer*)gesture { if ( gesture.state == UIGestureRecognizerStateEnded) { NSLog(@"Long Pressed"); //your stuff here when detected long hold } }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...