Нужно отложить касание на 3 пальца, а не на 1 палец - PullRequest
0 голосов
/ 20 октября 2011

Я работаю над интеграцией жестов в приложение для рисования для iPad. Например, я хотел бы провести три пальца влево, чтобы отменить шаг рисования.

У меня возникли проблемы, препятствующие переходу данных касания к касаниюBegan: withEvent: из-за чего при выполнении жеста на экран выводится изображение.

Если я использую свойство delayTouchesBegan, я могу предотвратить доставку этих данных прикосновением тремя пальцами. Однако, это также задерживает рисование, когда пользователь пытается нарисовать линию, которая идет влево. Это приводит к тому, что линия начинается далеко от того места, где пользователь начал рисовать.

Как я могу убедиться, что мое приложение задерживает только три пальца, а не один палец?

UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];

recognizer.numberOfTouchesRequired = 3;
recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
recognizer.delaysTouchesBegan = YES;

[self.view addGestureRecognizer:recognizer];

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Я нашел решение этой проблемы. Вместо использования свойства delayTouchesBegan средства распознавания жестов вы можете определять количество касаний, используя UIEvent, передаваемый в различные методы касания. Затем просто ограничьте действие в touchBegan: withEvent :, touchesMoved: withEvent: и touchesEnded: withEvent: методы, выполняемые только при одном касании.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //only process touch data if there is a single touch
    if ([[event allTouches] count] == 1) {
        //draw
    }
}
1 голос
/ 20 октября 2011

Это известная проблема с жестами.Обойти это невозможно, кроме как отказаться от UISwipeGestureRecognizer и выполнить обработку жестов вручную с помощью touchesBegan / Ended.Затем вы можете установить пользовательский таймер с более низким порогом.

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