В моем приложении я добавил новые Устройства распознавания Жеста, которые доступны в 3,2 SDK. Все, кажется, работает правильно и время отклика на экране, очень быстро. Но по некоторым причинам когда я добавляю requireGestureRecognizerToFail
к некоторым моим жестам существует очень видимая задержка, когда жест инициирован. Ниже отрывок кода, который я использую для создания Устройств распознавания Жеста. Кто-либо знает, почему существует задержка и как я могу зафиксировать ее? Я использую requireGestureRecognizerToFail
предотвратить SingleTap
жест от инициирования, когда пользователь выполняет a 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];
}
Если вы хотите различать одиночное и двойное касание, вы должны подождать достаточно долго, чтобы понять, что второго касания не будет, прежде чем вы сможете назвать его одиночным касанием. Альтернативой может быть разработка всех ваших действий с одним касанием таким образом, чтобы их можно было асинхронно отменять или возвращать при обнаружении двойного касания.
Например, если у вас есть страницы смены одного касания и масштабирование двойным касанием, то вам нужно будет анимировать страницу, изменяющуюся при одиночном касании, а затем отменить анимацию и масштабировать вместо этого при обнаружении второго касания. К тому времени вид, который обрабатывал одно касание, возможно, переместился. В большинстве случаев это больше проблем и путаницы, чем того стоит.