Распознаватель жестов iPad - отложенный ответ - PullRequest
8 голосов
/ 21 июня 2010

В своем приложении я добавил новые распознаватели жестов, которые доступны в 3.2 SDK. Кажется, все работает правильно, и время отклика на экране было очень быстрым. Но по какой-то причине, когда я добавляю requireGestureRecognizerToFail к некоторым из моих жестов, происходит очень заметная задержка при запуске жеста. Ниже приведен фрагмент кода, который я использую для создания распознавателей жестов. Кто-нибудь знает, почему происходит задержка и как я могу это исправить? Я использую requireGestureRecognizerToFail для предотвращения запуска жеста SingleTap, когда пользователь выполняет DoubleTap.

 - (void)createGestureRecognizers {

 //Single Finger Double-Tap
 UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc]
            initWithTarget:self action:@selector(handleSingleDoubleTap:)];
    singleFingerDTap.numberOfTapsRequired = 2;
    [super addGestureRecognizer:singleFingerDTap];

 //Single Finger Tap
 UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc]
              initWithTarget:self action:@selector(handleSingleTap:)];
    singleFingerTap.numberOfTapsRequired = 1;
 [singleFingerTap  requireGestureRecognizerToFail:singleFingerDTap];
 [self addGestureRecognizer:singleFingerTap];

 //Two Finger Pan
 UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc]
            initWithTarget:self action:@selector(handlePanGesture2:)];
    panGesture2.maximumNumberOfTouches = 2;
 [super addGestureRecognizer:panGesture2];

 //Single Finger Pan
 UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc]
             initWithTarget:self action:@selector(handlePanGesture1:)];
    panGesture1.maximumNumberOfTouches = 1;
 [panGesture1 requireGestureRecognizerToFail:panGesture2];
 [super addGestureRecognizer:panGesture1];

 [singleFingerDTap release];
 [singleFingerTap release];
    [panGesture1 release];
 [panGesture2 release];
}

1 Ответ

6 голосов
/ 21 июня 2010

Если вы хотите провести различие между одиночным и двойным касанием, вы должны подождать достаточно долго, чтобы понять, что второго касания не произойдет, прежде чем вы сможете назвать его одним касанием.Альтернативой может быть создание всех ваших действий одним нажатием таким образом, чтобы они могли асинхронно отменяться или отменяться при обнаружении двойного касания.

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

...