Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

— (void) motionEnded:(UIEventSubtype)motion

withEvent:(UIEvent *)event{

/* Обрабатываем движение. */

}

Как видите, параметр motion относится к типу UIEventSubtype. Тип UIEventSubtype имеет, в частности, значение UIEventSubtypeMotionShake, которое нас и интересует. Зарегистрировав такое событие, мы можем быть уверены в том, что

пользователь встряхнул устройство.

Далее переходим к реализации контроллера вида и обрабатываем метод motionEnded: withEvent::

— (void) motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{

if (motion == UIEventSubtypeMotionShake){

UIAlertView *alert =

[[UIAlertView alloc] initWithTitle:@"Shake"

message:@"The device is shaken"

delegate: nil

cancelButtonTitle:@"OK" otherButtonTitles: nil];

[alert show];

}

}

Если теперь встряхнуть устройство или имитировать такое движение в эмуляторе 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.

Эти шаги реализуются в следующем коде:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

CMMotionManager *manager = [[CMMotionManager alloc] init];

if ([manager isGyroAvailable]){

if ([manager isGyroActive] == NO){

[manager setGyroUpdateInterval:1.0f / 40.0f];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[manager

startGyroUpdatesToQueue: queue

withHandler: ^(CMGyroData *gyroData, NSError *error) {

NSLog(@"Gyro Rotation x = %.04f", gyroData.rotationRate.x);

NSLog(@"Gyro Rotation y = %.04f", gyroData.rotationRate.y);

NSLog(@"Gyro Rotation z = %.04f", gyroData.rotationRate.z);

}];

} else {

NSLog(@"Gyro is already active.");

}

} else {

NSLog(@"Gyro isn't available.");

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

Класс CMMotionManager

позволяет программисту получить от операционной системы iOS обновления данных гироскопа. Сначала нужно убедиться в том, что гироскоп имеется в том устройстве с iOS, где работает ваше приложение (подробнее об этом рассказано в разделе 18.2). Убедившись в этом, можно вызвать метод экземпляра setGyroUpdateInterval:, относящийся к классу CMMotionManager, чтобы задать количество обновлений, которые вы хотите получать от гироскопа в секунду. Например, если вам требуется N обновлений в секунду, задайте здесь значение 1.0/N.

Установив интервал обновлений, можно вызвать метод экземпляра startGyroUpdatesToQueue: withHandler:, относящийся к классу CMMotionManager, — так задается блок для обработки обновлений. О блоках подробнее рассказано в главе 7. Блоковый объект должен относиться к типу CMGyroHandler, принимающему два параметра.

• gyroData — данные, поступающие от гироскопа, заключены в объекте типа CMGyroData. Можно использовать свойство rotationRate класса CMGyroData (это структура) для получения доступа к значениям x, y и z. Эти значения представляют три эйлерова угла, называемых соответственно крен, тангаж и рыскание. Подробнее эти углы рассматриваются в работах по аэродинамике.

• error — ошибка типа NSError, которая может возникнуть, когда гироскоп посылает нам обновления.

Если вы не хотите работать с блоковыми объектами, нужно вызвать метод экземпляра startGyroUpdates, относящийся к классу CMMotionManager, — вместо метода экземпляра startGyroUpdatesToQueue: withHandler: того же класса, — а также создать специальный собственный поток. В этом потоке мы будем считывать обновления, поступающие от гироскопа и передаваемые свойству gyroData экземпляра используемого нами класса CMMotionManager.

Поделиться:
Популярные книги

Сокрушитель

Поселягин Владимир Геннадьевич
3. Уникум
Фантастика:
боевая фантастика
5.60
рейтинг книги
Сокрушитель

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Изгой Проклятого Клана. Том 6

Пламенев Владимир
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6

Газлайтер. Том 27

Володин Григорий Григорьевич
27. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 27

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Кондотьер

Листратов Валерий
7. Ушедший Род
Фантастика:
фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Кондотьер

Я Гордый часть 7

Машуков Тимур
7. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Я Гордый часть 7

Двойник Короля 8

Скабер Артемий
8. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 8

Матабар V

Клеванский Кирилл Сергеевич
5. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар V

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши