参考:
1 https://www.zhihu.com/question/25526443/answer/31040887
2 iPhone这十年在传感器上的演进- 知乎专栏
3 iOS开发之传感器
4 扒一扒iPhone6的手机传感器
5 非典型技术宅 的传感器系列文章 iOS传感器:实现一个随屏幕旋转的图片
关于传感器(Sensor),Apple官方好像并没有专门列出来介绍过,我只能从前辈的文章寻找,很多文章中都给iOS传感器进行过很详细的分类介绍,但有的传感器只是有过介绍,没有介绍使用方法或API,当然也有可能是我没搜索到,比如湿度传感器很多文章都提到,但详细使用方式就未曾看到过,还有这边的湿度传感器是指iPhone内部的?还是指iPhone所在外部环境的?
iPhone的传感器是经过长时间不停的变化和改进的,因为传感器一听名字就知道这种变化和改进十之八九是要与硬件有关系的。知乎中有一遍文章介绍的很详细,iPhone这十年在传感器上的演进- 知乎专栏。
iOS中传感器分类
我姑且按照我查看的资料对iOS传感器进行一个不精确分类。
传感器类型 | 说明 |
---|---|
加速计 | Core Motion,感应设备的运动(摇一摇、计步器) |
陀螺仪 | Core Motion,感应设备的持握方式(赛车类游戏) |
步数计 | Core Motion |
气压计 | Core Motion |
磁力计 | Core Motion |
距离传感器 | 感应是否有其他物体靠近设备屏幕(打电话自动屏) |
环境光线传感器 | 感应周边环境光线的强弱(自动调节屏幕亮度) |
内部温度传感器 | 感应设备内部的温度(提醒用户降温,防止损伤设备) |
湿度传感器 | 感应设备是否进水(方便维修人员) |
距离传感器和光线传感器
知乎知友 Hi-iD 的答案介绍过这两个传感器的关系,本人简单总结如下:
-
iPhone 5/5s/6之后光线/距离感应器就是iPhone顶部中心一个孔
- 光线传感器和距离传感器是两个独立的传感器,但两者都是对光作出反应。
- 距离传感器是基于红外光,距离传感器自身发射出的红外光,经外界反射后折回的红外光被距离传感器进行识别判断,所以距离传感器会有两个单元(反射和接收)
距离传感器的使用
距离传感器的使用的使用相对简单:
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.isProximityMonitoringEnabled = true
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.sensorStateChange(notification:)), name: Notification.Name.UIDeviceProximityStateDidChange, object: nil)
}
@objc func sensorStateChange(notification: NotificationCenter) {
if UIDevice.current.proximityState == true {
print("接近")
} else {
print("远离")
}
}
现在对iPhone顶部中心一个孔进行遮挡,就能感受的距离传感器。
Core Motion
Core Motion是关于accelerometers(加速计), gyroscopes(陀螺仪), pedometers(步数计), magnetometers( 磁力计), and barometers(气压计)等5个传感器使用的框架, 暂时就按照字面意思翻译成核心运动框架。官方文档的介绍:
Core Motion reports motion- and environment-related data from the onboard hardware of iOS devices, including from the accelerometers(加速计), gyroscopes(陀螺仪), pedometers(步数计), magnetometers( 磁力计), and barometers(气压计). You use this framework to access hardware-generated data so that you can use it in your app. For example, a game might use accelerometer and gyroscope data to control onscreen game behavior.
之后的文章就学习Core Motion的使用。😋