CoreMotion
距离传感器
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[UIDevice currentDevice].proximityMonitoringEnabled = YES;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceProximityStateDidChangeNotification)
name:UIDeviceProximityStateDidChangeNotification
object:nil];
}
- (void)deviceProximityStateDidChangeNotification {
if ([UIDevice currentDevice].proximityState) {
NSLog(@"有人靠近...");
} else {
NSLog(@"那人走了...");
}
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIDeviceProximityStateDidChangeNotification
object:nil];
}
运动管理器
#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>
@interface ViewController ()
@property (nonatomic, strong) CMMotionManager *motionManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.motionManager = [CMMotionManager new];
if (![self.motionManager isMagnetometerAvailable]) {
return;
}
self.motionManager.magnetometerUpdateInterval = 1;
[self.motionManager startMagnetometerUpdatesToQueue:
[NSOperationQueue mainQueue] withHandler:^(CMMagnetometerData * _Nullable magnetometerData,
NSError * _Nullable error) {
CMMagneticField magneticField = magnetometerData.magneticField;
NSLog(@"x: %f, y: %f, z: %f", magneticField.x, magneticField.y, magneticField.z);
}];
}
#pragma mark 点击屏幕获取数据
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
CMRotationRate rotationRate = self.motionManager.gyroData.rotationRate;
NSLog(@"x: %f, y: %f, z: %f", rotationRate.x, rotationRate.y, rotationRate.z);
}
#pragma mark 加速计Push
- (void)acceleratePush {
self.motionManager = [CMMotionManager new];
if (![self.motionManager isAccelerometerAvailable]) {
return;
}
self.motionManager.accelerometerUpdateInterval = 1;
[self.motionManager startAccelerometerUpdatesToQueue:
[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable
accelerometerData, NSError * _Nullable error) {
CMAcceleration acceleration = accelerometerData.acceleration;
NSLog(@"x: %f, y: %f, z: %f", acceleration.x, acceleration.y, acceleration.z);
}];
}
#pragma mark 加速计Pull
- (void)acceleratePull {
self.motionManager = [CMMotionManager new];
if (![self.motionManager isAccelerometerAvailable]) {
return;
}
[self.motionManager startAccelerometerUpdates];
}
#pragma mark 陀螺仪Push
- (void)gyroPush {
self.motionManager = [CMMotionManager new];
if (![self.motionManager isGyroAvailable]) {
return;
}
self.motionManager.gyroUpdateInterval = 1;
[self.motionManager startGyroUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
CMRotationRate rotationRate = gyroData.rotationRate;
NSLog(@"x: %f, y: %f, z: %f", rotationRate.x, rotationRate.y, rotationRate.z);
}];
}
#pragma mark 陀螺仪Pull
- (void)gyroPull {
self.motionManager = [CMMotionManager new];
if (![self.motionManager isGyroAvailable]) {
return;
}
[self.motionManager startGyroUpdates];
}
@end
摇一摇
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}
计步器
#import "ViewController.h"
#import <CoreMotion/CoreMotion.h>
@interface ViewController ()
@property (nonatomic, strong) CMStepCounter *stepCounter;
@property (nonatomic, strong) CMPedometer *pedometer;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
if (![CMPedometer isStepCountingAvailable]) {
return;
}
self.pedometer = [CMPedometer new];
[self.pedometer startPedometerUpdatesFromDate:[NSDate date]
withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
NSNumber *number = pedometerData.numberOfSteps;
NSLog(@"number: %@",number);
[self performSelectorOnMainThread:@selector(updateUI:) withObject:number waitUntilDone:NO];
}];
}
#pragma mark 更新界面的方法
- (void)updateUI:(NSNumber *)number {
self.label.text = [NSString stringWithFormat:@"您当前一共走了%@步", number];
}
#pragma mark iOS7的计步器
- (void)setpCounter {
if (![CMStepCounter isStepCountingAvailable]) {
return;
}
self.stepCounter = [CMStepCounter new];
[self.stepCounter startStepCountingUpdatesToQueue:[NSOperationQueue mainQueue] updateOn:5
withHandler:^(NSInteger numberOfSteps, NSDate * _Nonnull timestamp, NSError * _Nullable error) {
NSLog(@"number:%zd", numberOfSteps);
}];
}
@end