iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 7
0
自我挑戰組

白鬍子老頭30天 Swift Ios系列 第 29

Day(7+22) Core Motion

CoreMotion

獲取裝置資訊的api

  • accelerometer-加速度計
  • gyro-陀螺儀
  • magnetometer-磁力

從CMMotionManager獲取

  • 只會實例一個

使用

1.檢查裝置可不可行
2.
使用pull方式
跟他要

func {accelerometer,gyro,magnetometer,deviceMotion} Update()

2(1)
使用push方式
設定資料回報頻率 ex:30frame
3.建立一個Closure每30frame 會執行一次並且得到資料

  • 檢查裝置可不可行
var {accelerometer,gyro,magnetometer,deviceMotion} Available :Bool
  • 開始收集資料
func {accelerometer,gyro,magnetometer,deviceMotion} Update()
  • 如果現在正在收集資料
var {accelerometer,gyro,magnetometer,deviceMotion} Active :Bool
  • 停止收集資料
func stop {accelerometer,gyro,magnetometer,deviceMotion} Update()

Data

accelerometer

accelerometerData:CMAccelerometerData
會提供一個Struct

struct CMAcceleration{
var x:Double //in g
var y:Double
var z:Double
}

xyz 如果手正持手機那 y=1.0 x,z=0

gyro

gyroData:CMGyroData
一樣提供一個Struct

struct CMRotationRate{
var x:Double //radians/s
var y:Double
var z:Double
}

代表旋轉速率

magnetometer

magnetometerData:CMMagnetometerData
一樣提供一個Struct

struct CMMagneticField{
var x:Double //in microteslas
var y:Double
var z:Double
}

告訴你哪個是北邊

CMDeviceMotion

透過CMDeviceMotion

  • Acceleration Data
var gravity:CMAcceleration
var userAcceleration:CMAcceleration //用戶對手機的加速度
  • Rotation Data
var rotationRate :CMRotationRate
var attitude:CMAttitude // 設備的方位
class CMAttitude :NSObject {
var roll: Double
var pitch : Double
var yaw : Double
}

  • Magnetic Field Data
var magneticField:CMMagnetometerData
struct CMCalibratedMagneticField{
var field : CMMagneticField
var accuracy : CMCalibratedMagneticFieldAccuracy
}

第二種方法每段時間被提醒一次

func startAccelerometerUpdates(to queue: OperationQueue, 
                   withHandler handler: @escaping CMAccelerometerHandler)
func startGyroUpdates(to queue: OperationQueue, 
          withHandler handler: @escaping CMGyroHandler)
func startMagnetometerUpdates(to queue: OperationQueue, 
                  withHandler handler: @escaping CMMagnetometerHandler)
func startDeviceMotionUpdates(using referenceFrame: CMAttitudeReferenceFrame, 
                           to queue: OperationQueue, 
                  withHandler handler: @escaping CMDeviceMotionHandler)

間隔設定

var accelerometerUpdateInterval: TimeInterval { get set }
var gyroUpdateInterval: TimeInterval { get set }
var magnetometerUpdateInterval: TimeInterval { get set }
var deviceMotionUpdateInterval: TimeInterval { get set }

上一篇
Day(7+21) Dynamic Animation Demo
下一篇
Day(7+23) CoreLocation
系列文
白鬍子老頭30天 Swift Ios30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言