iOS中的感应器

title: iOS中的感应器
type: categories
date: 2017-01-17 16:54:30
categories: Swift

tags: [CoreMotion,感应器]

iOS中的感应器:

Accelerometer(加速器)

Gyroscope(陀螺仪)

Magnetometer(磁力计)

Proximity(距离感应)

Device motion

CMPedometer(计步器)

https://github.com/zhangzhaopds/CMMotionManager_demo.git

Proximity-距离感应
override func viewDidLoad() {
        super.viewDidLoad()

        // 开启设备的距离感应(默认是关闭)
        UIDevice.current.isProximityMonitoringEnabled = true

        // 添加监听
        NotificationCenter.default.addObserver(self, selector: #selector(proximityStateChanged), name: NSNotification.Name.UIDeviceProximityStateDidChange, object: nil)
    }

    // 销毁监听
    deinit {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIDeviceProximityStateDidChange, object: nil)
    }

    // 监听回调
    func proximityStateChanged() {
        switch UIDevice.current.proximityState {
        case true:
            print("物体靠近")
        default:
            print("物体远离")
        }
    }
CoreMotion-加速器、陀螺仪、磁力计
// 导入CoreMotion框架
import CoreMotion
let motionManager = CMMotionManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        // 判断加速器是否可用
        if !motionManager.isAccelerometerAvailable {
            print("加速器不可用")
            return
        }

        // 采样间隔
        motionManager.accelerometerUpdateInterval = 0.3

        // 加速器采样
        motionManager.startAccelerometerUpdates(to: OperationQueue.main) { (accelerometerData, error) in
            if (error != nil) {
                print("加速器采样错误:\(error)")
                return
            }
            print("加速器采样数据:\(accelerometerData)")
        }

        // 螺旋仪
        if !motionManager.isGyroAvailable {
            print("螺旋仪不可用")
            return
        }
        motionManager.gyroUpdateInterval = 0.3
        motionManager.startGyroUpdates(to: OperationQueue.main) { (gyroData, error) in
            if (error != nil) {
                print("螺旋仪采样错误:\(error)")
                return
            }
            print("螺旋仪数据:\(gyroData)")
        }

        // 磁力计
        if !motionManager.isMagnetometerAvailable {
            print("磁力计不可用")
            return
        }
        motionManager.magnetometerUpdateInterval = 0.3
        motionManager.startMagnetometerUpdates(to: OperationQueue.main) { (magData, error) in
            if error != nil {
                print("磁力计采样错误:\(error)")
                return
            }
            print("磁力计数据:\(magData)")
        }  
    }
摇一摇
override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) {
        super.motionBegan(motion, with: event)
        print("开始摇一摇")
    }

    override func motionCancelled(_ motion: UIEventSubtype, with event: UIEvent?) {
        super.motionCancelled(motion, with: event)
        print("取消")
    }

    override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
        super.motionEnded(motion, with: event)
        print("结束摇一摇")
    }
CMPedometer

需先加入 Privacy - Motion Usage Description权限

if !CMPedometer.isStepCountingAvailable() {
            print("计步器不可用")
            return
        }

        let pedometer = CMPedometer()
        pedometer.startUpdates(from: Date()) { (data, error) in
            if error != nil {
                print(error!)
                return
            }
            print(data?.numberOfSteps ?? 0)
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值