Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π³ΠΈΡΠΎΡΠΊΠΎΠΏ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΡΠ΅Π»Π΅ΡΠΎΠΌΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΠΎΠΊΡΡΠ³ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΊΡΠ΅ΠΏΠΊΠΎ Π΄Π΅ΡΠΆΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π² ΡΡΠΊΠ°Ρ , ΡΠΈΠ΄ΠΈΡΠ΅ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΌ ΠΊΡΠ΅ΡΠ»Π΅ ΠΈ ΠΊΡΡΡΠΈΡΠ΅ΡΡ Π½Π° Π½Π΅ΠΌ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ. ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π° Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ½Π°ΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ»Π°Π½Π΅ΡΡ ΠΠ΅ΠΌΠ»Ρ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΈ, Π½ΠΎ ΠΎΠ½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΡΠΈ 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];