Алгоритм работы
Правда, разработчики из компании Apple предвидели подобную ситуацию и предоставили специальный механизм, позволяющий нескольким распознавателям жестов нормально взаимодействовать друг с другом, даже если им приходится иметь дело с неоднозначными входными данными, способными инициировать любой из них. В основу такого механизма положен следующий принцип, на распознаватель жестов накладывается ограничение, запрещающее ему запускать на выполнение связанный с ним метод, если только этого не удастся сделать какому-то другому распознавателю жестов.
Данный принцип кажется немного абстрактным, поэтому переведем его в практическую плоскость. Одним из наиболее часто применяемых распознавателей жестов является класс UITapGestureRecognizer. Этот распознаватель постукивающих жестов может быть настроен на выполнение своих функций, когда происходит конкретное количество постукиваний по экрану. Допустим, у нас имеется представление, для которого нужно определить отдельные действия, совершаемые в тех случаях, когда пользователь постукивает по экрану один или два раза. Реализацию подобного алгоритма работы приложения мы можем начать.
Недостаток заключается в том, что оба распознавателя жестов ничего не знают ни о существовании друг друга, ни о том, что действия пользователя могут больше подойти другому распознавателю. Если реализовать все в приложении и пользователь дважды постучит по экрану с текущим представлением, то в конечном итоге будет вызван метод doDoubleTap, но также будет вызван метод doSingleMethod, причем дважды, по одному разу на каждое постукивание.
Данный недостаток можно преодолеть, потребовав отказа. В частности, мы можем сообщить распознавателю singleTap, что хотим, чтобы он инициировал свое действие только в том случае, если распознаватель doubleTap не распознает и не отреагирует на введенные пользователем данные. И это можно сделать в одной строке кода, как показано ниже.
[singleTap requireGestureRecognizerToFail:doubleTapJг
Это означает, что если пользователь постучит по экрану один раз, распознаватель singleTap не сразу приступит к своим обязанностям. Вместо этого он будет ждать до тех пор, пока не узнает, что распознаватель doubleTap решил не обращать больше внимания на текущий жест, поскольку пользователь не стукнул по экрану дважды.
- Дата: 19-01-2015, 09:46