传感器

作者: weyan | 来源:发表于2020-03-07 16:18 被阅读0次

    一、环境光传感器(Ambient Light Sensor)

    二、距离传感器(Proximity Sensor)

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            //1.开启距离传感器
            UIDevice.current.isProximityMonitoringEnabled = true;
            //2.添加一个通知,监听是否有物体靠近
            NotificationCenter.default.addObserver(self, selector: #selector(change), name: NSNotification.Name.UIDeviceProximityStateDidChange, object: nil)
        }
        
        @objc
        func change()  {
            if UIDevice.current.proximityState {
                print("有物体靠近")
            }else{
                print("有物体离开")
            }
        }
        
        deinit {
            NotificationCenter.default.removeObserver(self)
        }
    }
    

    三、磁力计传感器(Magmetometer Sensor)

    四、内部温度传感器

    五、湿度传感器

    六、陀螺仪

    七、运动传感器

    1、加速计

    (1)iOS4.0以前

    (2)iOS4.0以后

    import UIKit
    //导入CoreMotion
    import CoreMotion
    
    class ViewController: UIViewController {
        
        var motionManager:CMMotionManager?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            //1.创建运动管理者
            motionManager = CMMotionManager()
            //1.0、设置更新频率
            motionManager?.accelerometerUpdateInterval = 1.0/3.0
            //1.1、判断能不能用
            if !(motionManager?.isAccelerometerAvailable)! {
                print("你的硬件坏了")
                return
            }
            
            //2.开始检测
            //2.1、拉(pull)
            motionManager?.startAccelerometerUpdates()
            //2.2、推(push):就是把数据主动推送给外界
    //        motionManager?.startAccelerometerUpdates(to: OperationQueue.main, withHandler: { (data, error)  in
    //            print(data!.acceleration)
    //            })
        }
        
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            //若使用pull,直接获取数据
            print(motionManager?.accelerometerData)
        }
    }
    

    2、摇一摇

    方法1:通过分析加速计数据来判断是否进行摇一摇操作(比较复杂)。
    方法2:通过iOS自带的Shake 监控API(非常简单)。

    import UIKit
    
    class ViewController: UIViewController {
    
        override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
            print("摇一摇开始")
        }
    
        override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
            print("摇一摇结束")
        }
        
        override func motionCancelled(_ motion: UIEventSubtype, with event: UIEvent?) {
            print("摇一摇取消")
        }
    
    }
    

    3、计步器

    作用:1.可以判断走了多少步数 。2.判断当前楼层。

    (1)8.0之前

    import UIKit
    import CoreMotion
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            if !CMStepCounter.isStepCountingAvailable(){
                print("计步器不能使用")
                return
            }
            
            //1.创建一个计步器对象
            let stepCounter: CMStepCounter = CMStepCounter()
            //2.开始计步
            let start = NSDate(timeIntervalSinceNow: -24*60*60) as Date
            let to = NSDate(timeIntervalSinceNow: 0) as Date
            stepCounter.queryStepCountStarting(from: start, to: to, to: OperationQueue.main) { (count, error) in
                print(count)
            }
        }
    }
    

    (2、)8.0之后

    import UIKit
    import CoreMotion
    
    class ViewController: UIViewController {
        var pedometer: CMPedometer?
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //判断计步器是否可用
            if !CMPedometer.isStepCountingAvailable() {
                print("计步器不可以用")
                return
            }
            //2.创建计步器对象,开始计步
            pedometer = CMPedometer()
            let now = NSDate(timeIntervalSinceNow: 0) as Date
            pedometer!.startUpdates(from: now) { (data: CMPedometerData?, error: Error?) in
    //            data?.numberOfSteps:步数
    //            data?.distance 距离
    //            data?.floorsAscended 上楼
    //            data?.floorsDescended 下楼
    //            data?.currentPace步幅
    //            data?.currentCadence步频
                print(data)
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:传感器

          本文链接:https://www.haomeiwen.com/subject/igrlaqtx.html