Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 156

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, которая позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, насколько ΠΏΠΎΠ»Π΅Π·Π΅Π½ гироскоп. НапримСр, аксСлСромСтр Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ устройства Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Π³ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ оси, Ссли Π²Ρ‹ ΠΊΡ€Π΅ΠΏΠΊΠΎ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ устройство Π² Ρ€ΡƒΠΊΠ°Ρ…, сидитС Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ крСслС ΠΈ ΠΊΡ€ΡƒΡ‚ΠΈΡ‚Π΅ΡΡŒ Π½Π° Π½Π΅ΠΌ ΠΏΠΎ часовой стрСлкС ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки. ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π° Π² вашСй ΠΊΠΎΠΌΠ½Π°Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ ЗСмля устройство вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ оси, Π½ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ вращаСтся Π²ΠΎΠΊΡ€ΡƒΠ³ собствСнной оси Y, проходящСй ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€ устройства, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ аксСлСромСтр Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ двиТСния.

Гироскоп, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… устройствах с iOS, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ двиТСния. И ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³Π»Π°Π΄ΠΊΠΈΠ΅ ΠΈ Π±Π΅Π·ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обнаруТСния двиТСния. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² ΠΈΠ³Ρ€Π°Ρ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ трСбуСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ устройство двиТСтся ΠΏΠΎ осям X, Y ΠΈ Z β€” эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ аксСлСромСтра, β€” Π½ΠΎ ΠΈ ΠΎ Ρ‚ΠΎΠΌ, двиТСтся Π»ΠΈ устройство ΠΏΠΎ этим осям ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π—Π΅ΠΌΠ»ΠΈ. А Π²ΠΎΡ‚ для этого ΡƒΠΆΠ΅ Π½ΡƒΠΆΠ΅Π½ гироскоп.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ Core Motion для доступа ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅ΠΉ ΠΊΠ°ΠΊ ΠΎΡ‚ аксСлСромСтра, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ гироскопа (ΠΏΡ€ΠΈ ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠΈ). Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Core Motion примСняСтся Π²ΠΎ всСх Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… этой Π³Π»Π°Π²Ρ‹. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΎΠ²Ρ‹ΠΌ компилятором LLVM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с систСмным Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, Π²Π°ΠΌ всСго лишь потрСбуСтся ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° компилятор сам Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Эмулятор iOS Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ аксСлСромСтра ΠΈ гироскопа. ΠŸΡ€Π°Π²Π΄Π°, Π² эмуляторС iOS ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ встряхиваниС, Π²Ρ‹Π±Ρ€Π°Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Hardware β€” Shake Gesture (ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ЖСст встряхивания) (рис. 18.1).


Рис. 18.1. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Shake Gesture (ЖСст встряхивания) Π² эмуляторС iOS

18.1. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ доступности аксСлСромСтра

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, имССтся Π»ΠΈ Π² устройствС аксСлСромСтр.

РСшСниС

Для обнаруТСния аксСлСромСтра ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ isAccelerometerAvailable класса CMMotionManager. ΠœΠ΅Ρ‚ΠΎΠ΄ isAccelerometerActive Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΡƒΠ·Π½Π°Ρ‚ΡŒ, посылаСт Π»ΠΈ аксСлСромСтр Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ увСдомлСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π‘Π½Π°Ρ‡Π°Π»Π° убСдимся, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹:


#import Β«AppDelegate.hΒ»

#import <CoreMotion/CoreMotion.h>


@implementation AppDelegate


Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ присутствиС аксСлСромСтра ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° нашСго прилоТСния:


β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


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


if ([motionManager isAccelerometerAvailable]){

NSLog(@"Accelerometer is available.");

} else{

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

}


if ([motionManager isAccelerometerActive]){

NSLog(@"Accelerometer is active.");

} else {

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

}


self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];


self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}


Π˜Ρ‚Π°ΠΊ, Π² устройствС с iOS, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ аксСлСромСтр. Но это Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ аксСлСромСтр посылаСт увСдомлСния Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. Если аксСлСромСтр ΠΈΠ»ΠΈ гироскоп посылаСт Ρ‚Π°ΠΊΠΈΠ΅ увСдомлСния, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ (Π° Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π°ΠΌ потрСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, ΠΎ Ρ‡Π΅ΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅).

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π² эмуляторС iOS, Ρ‚ΠΎ Π² ΠΎΠΊΠ½Π΅ консоли появятся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ сообщСния:


Accelerometer is not available. // Π°ΠΊΡΠ΅Π»Π΅Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€ нСдоступСн

Accelerometer is not active. // Π°ΠΊΡΠ΅Π»Π΅Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½

ΠŸΡ€ΠΈ запускС Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΠΎΠΌ iPhone ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚Π°ΠΊΠΈΠ΅ значСния:

Accelerometer is available. // Π°ΠΊΡΠ΅Π»Π΅Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€ доступСн

Accelerometer is not active. // Π°ΠΊΡΠ΅Π»Π΅Ρ€ΠΎΠΌΠ΅Ρ‚Ρ€ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π΅Π½

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ устройствС с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой iOS ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ встроСнный аксСлСромСтр. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΈΡ… устройствах с iOS имССтся Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Π² ΠΊΠ°ΠΊΠΈΡ… β€” Π½Π΅Ρ‚, ΠΏΠ΅Ρ€Π΅Π΄ использованиСм аксСлСромСтра цСлСсообразно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, доступСн Π»ΠΈ ΠΎΠ½.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ этого оборудования, Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° CMMotionManager ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ isAccelerometerAvailable. Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ логичСского Ρ‚ΠΈΠΏΠ°, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES, Ссли аксСлСромСтр доступСн, ΠΈ NO, Ссли ΠΎΠ½ отсутствуСт.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, посылаСт Π»ΠΈ аксСлСромСтр обновлСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ (соотвСтствСнно, Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π»ΠΈ ΠΎΠ½), воспользовавшись ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ isAccelerometerActive класса CMMotionManager. О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ аксСлСромСтра, ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 18.3.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 18.3.

18.2. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ доступности гироскопа

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, имССтся Π»ΠΈ Π² устройствС гироскоп.

РСшСниС

ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ 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];