传感器是一种监测装置,能高手到被监测到的信息,并能将高手到的信息,按照一定的规律转换电信号。
iPhone中常见的传感器:
***环境光传感器:监测周围环境亮度。如屏幕根据环境自动调节亮度、拍照时是否打开闪光灯。
***距离传感器:监测是否所有物品靠近手机屏幕。如打电话时手机贴到耳朵边,屏幕变暗;微信中听语音的时候,靠近耳边声音会自动变小。
***磁力计传感器:从磁场获取方向信息。如导航方向,指南针。
***内部温度传感器:监测设备内部温度。
***湿度传感器:简单说,温度传感器类似化学中的试纸,一遇到水就会变红。通常apple售后在检测设备时,首先会取出手机内的“试纸”,判断设备是否进水,如果进水就不在保修范围之内。
***陀螺仪:检测设备在X、Y、Z轴旋转的角速度。主要是应用在游戏中和一些VR场景中。
***加速计:检测设备在X、Y、Z轴旋转的加速度。应用场景有微信的摇一摇和运动类型app中的计步器。
以前计步器实现思路,根据定位计算两个地点的距离,然后根据距离除以人行走的每一步的大概距离,但是这种做法计算不是很准确,iOS7开始苹果推出新的API,可以实现计步器。同样是在CoreMotion框架中,主要使用CMStepCounter这个类。所以第一件事实导入#import <CoreMotion/CoreMotion.h>这个头文件.代码如下。有一点要格外强调,@property (strong, nonatomic) CMPedometer *pedonmeter;这个要设置成属性,主要是为了保证其生命周期。如果没有创建成属性,计步器的功能将无法使用。
- (void)viewDidLoad {
[super viewDidLoad];
self.label.text = @"计步器";
self.label.frame = CGRectMake(50, 200, 300, 40);
//这个API只支持iOS8及以后
// 1.判断计步器是否可用
if (![CMPedometer isStepCountingAvailable]) {
NSLog(@"计步器不可用");
return;
}
// 2.创建计步器对象
CMPedometer *pedometer= [[CMPedometer alloc] init];
self.pedonmeter = pedometer;
// 3.开始计步 [NSDate date]表示从现在开始计步
[self.pedonmeter startPedometerUpdatesFromDate:[NSDate date] withHandler:^(CMPedometerData *pedometerData, NSError *error) {
if (error) {
return;
}
//行走步数
NSLog(@"steps = %@", pedometerData.numberOfSteps);
//行走距离
NSLog(@"distance = %@",pedometerData.distance);
//这里是子线程,要回到主线程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
self.label.text = [NSString stringWithFormat:@"%@sss",pedometerData.numberOfSteps];
});
}];
//4.查询前两天走了多少步(做多查询七天)
NSDateFormatter *fmt = [[NSDateFormatter alloc]init];
fmt.dateFormat = @"yyyy-MM-dd";
//这里的步数是01-07的晚上12点,到01-09的晚上的12点,总共的步数。实际就是01-08,01-09这两天总共的步数
NSDate *formDate = [fmt dateFromString:@"2017-01-08"];
NSDate *toDate = [fmt dateFromString:@"2017-01-10"];
[self.pedonmeter queryPedometerDataFromDate:formDate toDate:toDate withHandler:^(CMPedometerData * _Nullable pedometerData, NSError * _Nullable error) {
if (!error) {
NSLog(@"%@",pedometerData.numberOfSteps);
}
}];
}
网友评论