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

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

Жанры

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

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

Шрифт:

Решение

Пользуйтесь методом isGyroAvailable, относящимся к классу CMMotionManager, чтобы проверить наличие гироскопа. Кроме того, метод isGyroActive позволяет узнать, посылает ли в данный момент гироскоп обновления вашему приложению, то есть активен ли он:

#import «AppDelegate.h»

#import <CoreMotion/CoreMotion.h>

@implementation AppDelegate

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

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

if ([motionManager isGyroAvailable]){

NSLog(@"Gryro is available.");

} else {

NSLog(@"Gyro is not available.");

}

if ([motionManager isGyroActive]){

NSLog(@"Gryo is active.");

} else {

NSLog(@"Gryo is not active.");

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Эмулятор iOS не позволяет имитировать работу гироскопа. Запустив этот код в эмуляторе, вы увидите в окне консоли примерно такой текст:

Gyro is not available. // гироскоп недоступен

Gyro is not active. // гироскоп неактивен

Если запустить этот код на устройстве с iOS, оборудованном гироскопом, например на новом iPhone, то результаты будут иными:

Gyro is available. // гироскоп доступен

Gyro is not active. // гироскоп неактивен

Обсуждение

Если вы планируете выпустить приложение, в котором используется гироскоп, то нужно гарантировать, что ваша программа сможет работать и на других устройствах с iOS, где нет такого оборудования. Например, если вы используете гироскоп как элемент игры, то нужно убедиться в том, что игра будет работать и на других устройствах, хотя гироскопа они и не имеют. Ведь не во всех устройствах с iOS он установлен. Именно наличие гироскопа в устройстве мы и будем проверять в данном разделе.

Чтобы решить эту задачу, потребуется инстанцировать объект типа CMMotionManager. После этого мы должны будем получить доступ к логическому методу isGyroAvailable и посмотреть, доступен ли гироскоп на том устройстве, где выполняется ваш код. Кроме того, можно воспользоваться методом isGyroActive экземпляра CMMotionManager, чтобы узнать, посылает ли гироскоп в настоящее время обновления вашему приложению. Подробнее об этом поговорим в разделе 18.5.

См. также

Раздел 18.5.

18.3. Получение данных акселерометра

Постановка задачи

Требуется указать операционной системе iOS, чтобы она посылала вашей программе данные от акселерометра.

Решение

Пользуйтесь методом экземпляра startAccelerometerUpdatesToQueue: withHandler:, относящимся к классу CMMotionManager. Вот заголовочный файл контроллера вида, в котором класс CMMotionManager применяется для получения обновлений от акселерометра:

#import «ViewController.h»

#import <CoreMotion/CoreMotion.h>

@interface ViewController 

@property (nonatomic, strong) CMMotionManager *motionManager;

@end

@implementation ViewController

Мы реализуем контроллер вида и воспользуемся методом startAccelerometerUpdatesToQueue: withHandler: класса CMMotionManager:

— (void)viewDidLoad{

[super viewDidLoad];

self.motionManager = [[CMMotionManager alloc] init];

if ([self.motionManager isAccelerometerAvailable]){

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

[self.motionManager

startAccelerometerUpdatesToQueue: queue

withHandler: ^(CMAccelerometerData *accelerometerData, NSError *error) {

NSLog(@"X = %.04f, Y = %.04f, Z = %.04f",

accelerometerData.acceleration.x,

accelerometerData.acceleration.y,

accelerometerData.acceleration.z);

}];

} else {

NSLog(@"Accelerometer is not available.");

}

}

Обсуждение

Акселерометр фиксирует данные по трем измерениям (то есть по осям декартовых координат), которые iOS сообщает вашей программе как значения x, y и z. Эти значения инкапсулируются в структуре CMAcceleration:

typedef struct {

double x;

double y;

double z;

} CMAcceleration;

Предположим, что вы держите устройство с iOS прямо перед собой, экран обращен к вам и находится в книжной ориентации. В таком случае:

• ось X расположена слева направо и проходит по центру экрана устройства. При этом значения изменяются слева направо в диапазоне от –1 до +1;

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

Тринадцатый XIII

NikL
13. Видящий смерть
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Тринадцатый XIII

Зодчий. Книга II

Погуляй Юрий Александрович
2. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга II

Армагед-дом

Дяченко Марина и Сергей
Фантастика:
социально-философская фантастика
альтернативная история
8.40
рейтинг книги
Армагед-дом

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VII

И в аду есть герои

Панов Вадим Юрьевич
5. Тайный Город
Фантастика:
боевая фантастика
9.19
рейтинг книги
И в аду есть герои

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Законник Российской Империи

Ткачев Андрей Юрьевич
1. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Законник Российской Империи

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

Прапорщик. Назад в СССР. Книга 7

Гаусс Максим
7. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 7

Черный Маг Императора 15

Герда Александр
15. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 15

Стражи душ

Кас Маркус
4. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Стражи душ

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Группа крови на рукаве

Вязовский Алексей
1. ГК
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.40
рейтинг книги
Группа крови на рукаве

Вернувшийся: Корпорация. Том III

Vector
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вернувшийся: Корпорация. Том III