Глава 10. Реализация распознавания жестов

Глава 10. Реализация распознавания жестов

10.0. Введение

Жест (Gesture) — это комбинация событий касания. Жесты применяются, например, в стандартном приложении Photo (Фото) для iOS. В этой программе пользователь может увеличивать или уменьшать фотографию, двигая двумя пальцами в разные стороны или навстречу друг другу. Некоторые образцы кода, чаще всего применяемого для обнаружения событий, связанных с жестикуляцией, инкапсулированы во встроенные классы iOS SDK, которые пригодны для многократного использования. Эти классы можно применять для обнаружения смахивания (Swipe), щипка (Pinch), панорамирования (Pan), нажатия (Tap), перетаскивания (Drag), долгого нажатия (Long Press) и вращения (Rotation).

Распознаватели жестов необходимо добавлять к экземплярам класса UIView. Один вид может быть связан с несколькими распознавателями жестов. Как только вид регистрирует жест, при необходимости он должен будет передать данный жест другим видам, расположенным ниже в иерархической цепочке.

Некоторые события, возникающие при работе приложения, могут быть сложны для обработки и требовать, чтобы одно и то же событие обнаруживалось в разных видах отдельно взятого приложения. Таким образом, возникает необходимость в распознавателях жестов, пригодных для многократного использования. В iOS SDK 5 интегрированы распознаватели шести жестов, таких как:

• смахивание;

• вращение;

• щипок;

• панорамирование;

• длинное нажатие;

• нажатие.

Общий принцип обработки жестов с помощью этих встроенных распознавателей таков.

1. Для требуемого распознавателя жестов создается объект данных нужного типа.

2. Этот объект добавляется в качестве распознавателя жестов к тому виду, который будет принимать жесты.

3. Пишется метод, вызываемый при возникновении жеста и осуществляющий указанное вами действие.

Метод, который ассоциируется в качестве целевого метода с любым распознавателем жестов, должен следовать перечисленным далее правилам:

• возвращать void;

• либо не принимать параметров, либо принимать единственный параметр типа UIGestureRecognizer, в котором система будет передавать распознаватель жестов, вызывающий данный метод.

Рассмотрим два примера:

— (void) tapRecognizer:(UITapGestureRecognizer *)paramSender{

/* */

}

— (void) tapRecognizer{

/* */

}

Распознаватели жестов делятся на две категории: дискретные (Discrete) и непрерывные (Continuous). Дискретные распознаватели жестов регистрируют связанные с ними события жестов, а после этого вызывают метод в своем обладателе. Непрерывные распознаватели жестов сообщают своему объекту-обладателю о жесте на протяжении всего того времени, пока этот жест осуществляется, и многократно вызывают метод в своем целевом объекте, пока это событие не закончится.

Например, событие двойного нажатия является дискретным. Хотя оно и состоит из двух нажатий, система улавливает, что промежуток между ними был очень кратким и оба нажатия можно воспринимать как единое событие. Распознаватель двойного нажатия вызывает в своем целевом объекте соответствующий метод, как только будет зарегистрировано двойное нажатие.

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

Распознаватели жестов можно добавлять к любому экземпляру класса UIView с помощью метода addGestureRecognizer:, относящегося к виду. При необходимости распознаватели можно удалять, пользуясь методом removeGestureRecognizer:.

У класса UIGestureRecognizer есть свойство под названием state. Свойство state представляет различные состояния распознавателя жестов, которые он принимает в ходе распознавания. Последовательности претерпеваемых состояний различаются у дискретных и непрерывных распознавателей жестов.

Дискретный распознаватель жестов может проходить через три следующих состояния:

• UIGestureRecognizerStatePossible;

• UIGestureRecognizerStateRecognized;

• UIGestureRecognizerStateFailed.

В зависимости от ситуации дискретный распознаватель жестов может сообщать своей цели о состоянии UIGestureRecognizerStateRecognized либо о состоянии UIGestureRecognizerStateFailed, если в процессе распознавания возникнет ошибка.

Непрерывные распознаватели жестов претерпевают иную серию состояний, которые посылают своим целям:

• UIGestureRecognizerStatePossible;

• UIGestureRecognizerStateBegan;

• UIGestureRecognizerStateChanged;

• UIGestureRecognizerStateEnded;

• UIGestureRecognizerStateFailed.

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

Опять же, если непрерывный распознаватель жестов столкнется с ситуацией, которую не удается разрешить с помощью имеющихся у системы возможностей, возникнет состояние UIGestureRecognizerStateFailed, а не UIGestureRecognizerStateEnded.

Данный текст является ознакомительным фрагментом.



Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Глава 4 РЕАЛИЗАЦИЯ ПОЛИТИК БЕЗОПАСНОСТИ

Из книги автора

Глава 4 РЕАЛИЗАЦИЯ ПОЛИТИК БЕЗОПАСНОСТИ В предыдущих главах мы с вами рассмотрели основные понятия и определения политик безопасности. Познакомились с опытом разработки политик безопасности и различными подходами ведущих компаний-производителей в отрасли


8.9.12 Отсутствие распознавания медленных и быстрых связей

Из книги автора

8.9.12 Отсутствие распознавания медленных и быстрых связей Сетевой администратор может вручную присвоить для связи значение счетчика попаданий. Следовательно, для связи "точка-точка" со скоростью 9,6 Кбайт/с можно установить значение счетчика 5, что укажет на ее меньшие


Глава 4. Реализация функциональности приложения

Из книги автора

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


Система распознавания 3D-моделей

Из книги автора

Система распознавания 3D-моделей Огромное значение для любой системы трехмерного твердотельного моделирования имеет возможность обмена данными с другими САПР, используемыми предприятиями-заказчиками. Некоторые машиностроительные компании при проектировании и


Глава 5 Реализация

Из книги автора

Глава 5 Реализация В основном разработка программы сводится к написанию определений классов (и шаблонов классов) и объявлений функций (и шаблонов функций). Если сделать это правильно, то реализация уже не так сложна. Однако на некоторые моменты все же стоит обратить


10.1. Обнаружение жестов смахивания

Из книги автора

10.1. Обнаружение жестов смахивания Постановка задачи Необходимо идентифицировать скользящие жесты смахивания, которые пользователь осуществляет на виде, например, когда убирает картинку с


10.2. Обнаружение жестов вращения

Из книги автора

10.2. Обнаружение жестов вращения Постановка задачи Необходимо обнаруживать, когда пользователь пытается повернуть пальцами элемент, изображенный на


10.3. Обнаружение жестов панорамирования и перетаскивания

Из книги автора

10.3. Обнаружение жестов панорамирования и перетаскивания Постановка задачи Требуется предоставить пользователю возможность перемещать элементы в пользовательском интерфейсе, касаясь сенсорного экрана пальцами. Жесты панорамирования — это непрерывные движения


10.4. Обнаружение жестов долгого нажатия

Из книги автора

10.4. Обнаружение жестов долгого нажатия Постановка задачи Необходимо обнаруживать ситуации, в которых пользователь нажимает определенный экранный элемент и удерживает палец на экране в течение некоторого периода


10.5. Обнаружение жестов-нажатий

Из книги автора

10.5. Обнаружение жестов-нажатий Постановка задачи Необходимо фиксировать, когда пользователь нажимает экранный вид в той или иной


Глава 19. Системы распознавания текстов в офисе

Из книги автора

Глава 19. Системы распознавания текстов в офисе Основное назначение пакетов оптического распознавания символов (Optical Character Recognition, OCR) состоит в анализе растровой информации (отсканированного символа) и присвоении точечному изображению символа фиксированного


Глава 29. Процесс сканирования и распознавания печатного материала

Из книги автора

Глава 29. Процесс сканирования и распознавания печатного материала • В программе ABBYY FineReader имеется специальная кнопка Scan and Read, которая дает возможность произвести полную обработку текста: отсканировать. распознать. проверить. сохранить результаты распознавания. После


Глава 37. Экспорт результатов распознавания во внешние приложения

Из книги автора

Глава 37. Экспорт результатов распознавания во внешние приложения Результаты распознавания можно сохранить в файл, передать во внешнее приложение, не сохраняя на диск, скопировать в буфер обмена или отправить по электронной почте. Сохранить можно все страницы или только


ГЛАВА 15 Реализация

Из книги автора

ГЛАВА 15 Реализация Цель данного этапа — базовая конфигурация системы на основе составленного ранее плана Концептуального проектирования. Для этого бизнес-процессы делятся на циклы взаимосвязанных бизнес-процессов. Одновременно с этим команда проекта SAP проходит


ГЛАВА 1 ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ КЛИЕНТ/СЕРВЕР В СИСТЕМЕ SAP R/3

Из книги автора

ГЛАВА 1 ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ КЛИЕНТ/СЕРВЕР В СИСТЕМЕ SAP R/3 Базовая технология SAP, давно известная как SAP R/3 Basis, показала себя надежной платформой благодаря своей высокопроизводительной архитектуре. Сервер приложений Web SAP (Web AS - Web Application Server) является поэтому