iOS. Приемы программирования
Шрифт:
Как видите, параметр motion относится к типу UIEventSubtype. Тип UIEventSubtype имеет, в частности, значение UIEventSubtypeMotionShake, которое нас и интересует. Зарегистрировав такое событие, мы можем быть уверены в том, что
Далее переходим к реализации контроллера вида и обрабатываем метод motionEnded: withEvent::
Если теперь встряхнуть устройство или имитировать такое движение в эмуляторе iOS (см. введение к этой главе), в окне консоли мы увидим текст Detected a shake (Обнаружено встряхивание).
18.5. Получение данных гироскопа
Постановка задачи
Требуется получать информацию о движении устройства от гироскопа, установленного в устройстве с iOS.
Решение
Выполните следующие шаги.
1. Выясните, имеется ли в данном устройстве гироскоп. О том, как это делается, рассказано в разделе 18.2.
2. Если гироскоп в устройстве есть, проверьте, не посылает ли он уже уведомления. О том, как это делается, рассказано в разделе 18.2.
3. Воспользуйтесь методом экземпляра setGyroUpdateInterval:, относящимся к классу CMMotionManager, чтобы указать, сколько обновлений вы хотите получать в секунду. Например, если вы желаете получать 20 обновлений в секунду, задайте здесь значение 1.0/20.0.
4. Активизируйте метод экземпляра startGyroUpdatesToQueue: withHandler:, относящийся к классу CMMotionManager. Объект очереди может просто представлять собой главную операционную очередь (как мы увидим позже), а блок обработчика должен соответствовать формату CMGyroHandler.
Эти шаги реализуются в следующем коде:
Обсуждение
Класс CMMotionManager
Установив интервал обновлений, можно вызвать метод экземпляра startGyroUpdatesToQueue: withHandler:, относящийся к классу CMMotionManager, — так задается блок для обработки обновлений. О блоках подробнее рассказано в главе 7. Блоковый объект должен относиться к типу CMGyroHandler, принимающему два параметра.
• gyroData — данные, поступающие от гироскопа, заключены в объекте типа CMGyroData. Можно использовать свойство rotationRate класса CMGyroData (это структура) для получения доступа к значениям x, y и z. Эти значения представляют три эйлерова угла, называемых соответственно крен, тангаж и рыскание. Подробнее эти углы рассматриваются в работах по аэродинамике.
• error — ошибка типа NSError, которая может возникнуть, когда гироскоп посылает нам обновления.
Если вы не хотите работать с блоковыми объектами, нужно вызвать метод экземпляра startGyroUpdates, относящийся к классу CMMotionManager, — вместо метода экземпляра startGyroUpdatesToQueue: withHandler: того же класса, — а также создать специальный собственный поток. В этом потоке мы будем считывать обновления, поступающие от гироскопа и передаваемые свойству gyroData экземпляра используемого нами класса CMMotionManager.
Амазонки под черными парусами
Сыщицы-любительницы Кира и Леся
Детективы:
иронические детективы
рейтинг книги
Завещание предков
Приключения:
исторические приключения
рейтинг книги
Тринадцатый XIII
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
рейтинг книги
Возвышение Меркурия. Книга 4
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
рейтинг книги
Фантастические рассказы из журнала «Вокруг света»
Фантастика:
научная фантастика
рейтинг книги
Том 10. Публицистика
Документальная литература:
публицистика
рейтинг книги
Сыновья
Проза:
современная проза
военная проза
роман
советская классическая проза
рейтинг книги
Газлайтер. Том 6
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Последний Паладин. Том 5
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Сборник статей
Научно-образовательная:
философия
культурология
рейтинг книги
Пламенев. Книга 3-7
Пламенев
Фантастика:
аниме
уся
фэнтези
сянься
рейтинг книги
Кола
Проза:
историческая проза
рейтинг книги
Воры в законе и авторитеты
Документальная литература:
публицистика
рейтинг книги