1 . iOS設(shè)備的傳感器簡介 (注釋 所有的調(diào)試設(shè)備必須是真機(jī))
? ?1.1 環(huán)境傳感器 Ambient Light sensor ?作用 讓眼睛更舒適,照相的時(shí)候自動開啟閃光。
? ?1.2 距離傳感器 Proximity sensor 作用:用于檢測是否含有其他的物體靠近設(shè)備。(例如當(dāng)你打電話的時(shí)候設(shè)備靠近耳朵踊沸,手機(jī)的屏幕就會自動關(guān)閉,好處是節(jié)約電量,防止耳朵或面部觸摸屏幕引起一些意外的操作)
代碼如下:
開啟:距離傳感器
?[UIDevice currentDevice].ProximityMonitoringEnabled = YES;
監(jiān)聽距離傳感器的方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changes) name:UIDeviceProximityStateDidChangeNotification object:nil];
}
實(shí)現(xiàn)監(jiān)聽的方法
-(void)changes{
[UIDevice currentDevice].proximityState 是一個(gè)BOOL值。通過bool值來判斷是靠近還是遠(yuǎn)離典徘。
if ([UIDevice currentDevice].proximityState) {
NSLog(@"有物品靠近");
}else{
NSLog(@"有物品離開");
}
1.3.加速計(jì)傳感器?
? (檢測那個(gè)方向有力的作用,用處:搖一搖腺律,計(jì)步器)。
1.3.1在iOS ?5.0以前實(shí)現(xiàn)的方法非常簡單
//? ? 加速器 這是一個(gè)單例
UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
設(shè)置代理(UIAccelerometerDelegate)
accelerometer.delegate = self;
accelerometer.updateInterval = 1.0;
// 實(shí)現(xiàn)代理方法
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
NSLog(@"x:%f,y:%f,z:%f",acceleration.x,acceleration.y,acceleration.z);
}
通過這個(gè)代理方法在這里就可以看到那個(gè)方向有受力宜肉。
1.3.2
? iOS 5.0 ?以后加速器有全面升級了匀钧,并且引入了陀螺儀 與運(yùn)動相關(guān)的編程越來越重要 apple 在ios4.0 中增加了專門處理Motion的框架 Coremotion.framework 。不僅能夠提供實(shí)時(shí)的加速值 和旋轉(zhuǎn)速速谬返,而且apple 還集成了很多牛逼的算法榴捡。
Core Motion 獲取數(shù)據(jù)的兩種方式
? push?
創(chuàng)建運(yùn)動管理者 ?
導(dǎo)入頭文件 #import <CoreMotion/CorMotion.h>
首先在擴(kuò)展中? 定義一個(gè)屬性 @property (nonatomic, strong) CMMotionManager *manager;
self.manager = [[CMMotionManager alloc]init];
判斷是否可用
if (!_manager.isAccelerometerAvailable) {
NSLog(@"加速計(jì)不可用");
return;
}
設(shè)置采樣間隔
[_manager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
// 當(dāng)采樣到加速計(jì)信息就會執(zhí)行
if (!error) {
// 獲取加速劑信息
CMAcceleration acceleration = accelerometerData.acceleration;
NSLog(@"x:%f,y :%f, z:%f",acceleration.x,acceleration.y,acceleration.z);
}
}];
在這里面可以得到加速計(jì)的信息
post 方式
self.manager = [[CMMotionManager alloc]init];
判斷是否可用
if (!_manager.isAccelerometerAvailable) {
NSLog(@"加速計(jì)不可用");
return;
}
// 開始采樣
?self.manager startAccelerometerUpdates];
// 獲得加速計(jì)的信息
CMAcceleration accertino = self.manger.ccccelerometerData.acceleration;
1.4 陀螺儀
// 陀螺儀
if (![self.manager isGyroActive]) {
NSLog(@"你的手機(jī)不支持陀螺儀");
return;
}
// 設(shè)置時(shí)間間隔
self.manager.gyroUpdateInterval = 1.0;
// 開始采樣
[self.manager startGyroUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
CMRotationRate rate = gyroData.rotationRate;
NSLog(@"%f,%f,%f",rate.x,rate.y,rate.z);
}];
其他的傳感器 和以上的使用方法都是一樣的。
傳感器的使用 手機(jī)搖一搖功能 ?直接實(shí)現(xiàn)者三個(gè)方法就可以以可
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
NSLog(@"監(jiān)聽到用戶搖一搖朱浴,可以在這里面執(zhí)行你想要的操作");
}
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{
NSLog(@"監(jiān)聽到搖一搖被取消");
}
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"監(jiān)聽到搖一搖結(jié)束");
}