Нужный диапазон
В прошлой статье, в приведенном нами коде мы определяем три переменные: lastPreviousPoint, lastCurrentPoint и lineLengthSoFar. Всякий раз, когда мы получаем уведомление о касании экрана, в наше распоряжение предоставляются точки предыдущего и текущего касаний. Эти две точки определяют отрезок линии. При последующем касании добавляется еще один отрезок линии. Мы сохраняем обе упомянутые выше точки предыдущего касания в переменных lastPreviousPoint и lastCurrentPoint соответственно, чтобы получить предыдущий отрезок линии. Далее мы можем сравнить этот отрезок линии с отрезком линии текущего касания. Сравнивая их, мы можем выяснить, проводится ли по-прежнему одна и та же линия или же образуется достаточно острый угол между двумя отрезками, а, следовательно, рисуется форма в виде галочки.
Напомним, что каждому объекту типа UITouch известно его текущее, а также предыдущее положение в представлении. Но для того чтобы сравнивать углы, нам должно быть известно о линии, образованной двумя точками предыдущего касания, и поэтому мы должны сохранить в соответствующих переменных точки предыдущего и текущего касаний экрана, совершенных пользователем в последний раз. Этими двумя переменными мы будем пользоваться для сохранения двух значений всякий раз, когда вызывается рассматриваемый здесь метод, чтобы иметь возможность сравнивать текущую линию с предыдущей и проверять наличие угла между ними.
Кроме того, мы объявляем переменную для хранения текущего отсчета расстояния, на которое палец пользователя переместился по экрану. Так, если палец пользователя не переместился хотя бы на 10 пикселей (это значение сохраняется в переменной kMinimumCheckMarkLength), то попадание угла в нужный диапазон уже не имеет никакого значения. Если мы не потребуем соблюдения этого расстояния, то в итоге получим немало ложных срабатываний.
Теперь выберите исходный файл CheckMarkRecognizer .m и внесите в него изменения.
После импорта упоминавшегося выше заголовочного файла CGPointUtils.h в приведенном раньше коде мы импортируем специальный заголовочный файл UIGesture RecognizerSubclass.h, содержащий объявления, предназначенные для применения только в подклассе. Это делается, главным образом, для того, чтобы свойство state распознавателя жестов стало доступным для чтения. Такой внутренний механизм действия подкласса будет использован для подтверждения факта успешного завершения отслеживаемого нами жеста.
- Дата: 20-01-2015, 18:08