// Check whether the accelerometer is available

        guard self.motionManager.isAccelerometerAvailable else { return }
        // Update the recurring update interval
        let updateInterval = 0.2
        self.motionManager.accelerometerUpdateInterval = updateInterval
        // Start accelerometer updates
Core Motion 详解
  • Device Orientation
  • Gyroscope
  • Device Motion
  • Accelerometer
  • 欧拉角(Euler angles)和四元数(Quaternion)

Core Motion Manager 有两种获取数据的方式 PULLPUSH. 因为PULL的方式比较简单,所以在这里举例简单说明一下,PUSH的方式将在后面的小节具体说明。

PULL

Start
func startAccelerateUpdate(){
    // Check whether the accelerometer is available
    guard self.motionManager.isAccelerometerAvailable else { return }
    // Update the recurring update interval
    let updateInterval = 0.2
    self.motionManager.accelerometerUpdateInterval = updateInterval
    // Start accelerometer updates
    self.motionManager.startAccelerometerUpdates()    
}

在需要开启的地方调用这个方法,注意startAccelerometerUpdates() 方法并不是立即起作用的,也就是说在这一行之后立即读取数据会得到nil.

Pull
func pullAccelerationData(){
    // check accelerometer is actived
    guard self.motionManager.isAccelerometerActive else { return }
    // Handler to process accelerometer data
    if let acceleration = accelerometerData?.acceleration{
        // Handle acceleration
        print(String(format: "Acceleration In X : %.2f", acceleration.x))
        print(String(format: "Acceleration In Y : %.2f", acceleration.y))
        print(String(format: "Acceleration In Z : %.2f", acceleration.z))
    }
}
Stop
func stopUpdates() {
    // Check whether the accelerometer is actived
    if self.motionManager.isAccelerometerActive {       
        // stop accelerometer updates
        self.motionManager.stopAccelerometerUpdates()   
    }
}

updateInterval 可以一个公用的变量,这样可以用到 acceleration 和gyroscope里,保持相同的更新频率。

更新频率越快,耗电越快。

  • 1/10 普通的view更新
  • 1/60 游戏视频实时更新
  • 更高的。。。
Copyright © Xianbin Lin 2017 all right reserved,powered by GitbookModified time: 2017-07-23 18:40:08

results matching ""

    No results matching ""