UIGestureRecognizerDelegate никогда не показывает нажатие в состоянии «распознано» - PullRequest
0 голосов
/ 08 февраля 2012

Я немного смущен методом в протоколе UIGestureRecognizerDelegate.Когда я реализую метод делегата ниже, я, кажется, никогда не получаю мои UITapGestureRecognizer, отправленные этому методу с их состоянием как UIGestureRecognizerStateRecognized.Они всегда в состоянии UIGestureRecognizerStatePossible.Это правильно?

Ниже приведен тестовый код, который я использовал для настройки моего жеста касания и моей тестовой реализации метода делегата:

UITapGestureRecognizer *singelTap = [[UITapGestureRecognizer alloc] initWithTarget:nil action:nil];    
singelTap.numberOfTapsRequired = 1;
singelTap.delegate = self;
[self.view addGestureRecognizer:singelTap];

.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
        int i = 0;

        if(gestureRecognizer.state == UIGestureRecognizerStateBegan){
            i=1;
        }
        if(gestureRecognizer.state == ..... //testing for all possible states...


return YES;
}

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

Это правильно. Когда вы реализуете

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

, вы получаете возможность решить, должен ли UIGestureRecognizer получать прикосновение. Это означает, что он еще не получил прикосновение . Поскольку рассматриваемый UIGestureRecognizer еще не получил ничего общего с этим конкретным касанием, он не смог определить, распознал ли он его или нет; таким образом, он остается в состоянии UIGestureRecognizerStatePossible во время этого метода.

Если вы вернете YES из метода, касание будет отправлено в UIGestureRecognizer.

Только тогда UIGestureRecognizer будет обрабатывать касание.

1 голос
/ 08 февраля 2012

Протокол UIGestureRecognizerDelegate предназначен только для тонкой настройки поведения распознавателя жестов. Фактическое распознавание событий осуществляется путем установки цели и селектора:

UITapGestureRecognizer *gr = [[[UITapGestureRecognizer alloc]
             initWithTarget:self action:@selector(handleTap:)] autorelease];

// add gr to a view


-(void)handleTap:(UITapGestureRecognizer*)tg
{
    if ( tg.state != UIGestureRecognizerStateRecognized ) return;
    NSLog(@"tap recognized");
}

В большинстве случаев вы можете спокойно игнорировать протокол UIGestureRecognizerDelegate.

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

Обнаружено это в документах

Этот метод вызывается перед touchesBegan: withEvent: вызывается в распознавателе жестов для нового прикосновения.

Так что я думаю,прикосновение может быть только в «возможном» состоянии.

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