[ SWIFT ] - Core Motion - 重力感應 或稱 加速感應

Core Motion 介紹
Core Motion主要提供:加速器、陀螺儀和磁力儀得設備資料,用以表示設備的重力方向、加速器資料、磁場資料,藉由XYZ三軸(pitch、roll、yaw)來表示旋轉的狀況。





※以下的偵測單位都是米(meter)
※CMMotionManager技術文件請參考https://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMMotionManager_Class/
(1)偵測高度:
使用CMAltimeter 類別 中
startRelativeAltitudeUpdatesToQueue方法:開始偵測高度
stopRelativeAltitudeUpdates方法:結束偵測高度
例如:A點開始偵測高度到B點偵測結束,當B點 > A點時回傳正值,當B點
(2)計步器:
提供A點到B點之間的步數、樓層高度與距離數據。
使用CMPedometer 類別中
      (2.1)isStepCountingAvailable:是否可使用計步器
          startPedometerUpdatesFromDate:withHandler:輸入日期查詢,可回傳步數、樓                                                                                                           層高度與距離。            
          stopPedometerUpdates:停止使用計步器。
      (2.2)isFloorCountingAvailable:是否可偵測上下樓層True表示可以False表示不可以。
      (2.3)queryPedometerDataFromDate:toDate:withHandler:偵測的時間點
      (2.4)accelerometerAvailable:偵測重力感應是否可用。
      (2.5)accelerometerActive:偵測目前重力感應使否啟用中。
(3)偵測目前裝置中陀螺儀是否可用與陀螺儀目前是否持續運作中
      (3.1)gyroAvailable:偵測目前裝置中陀螺儀是否可用,true表示此裝置有陀螺儀
      (3.2)gyroActive:陀螺儀是否持續運作中,true表示目前陀螺儀仍持續傳送資料給                                                    APP。
(4) 取得重力感應資料:startAccelerometerUpdatesToQueue:withHandler: instance                                                 method of CMMotionManager
(5)偵測iOS裝置得搖晃或震動:motionEnded:withEvent: method of any object in                                                                     your application that is of type UIResponder.
(6)取得陀螺儀得資料:
          (6.1)檢查目前硬體設備是否有陀螺儀
          (6.2)如果陀螺儀有效,檢查目前陀螺儀是否持續傳送資料
          (6.3)設定更新頻率:使用gyroUpdateInterval 來更新陀螺儀資料,單位:秒,並設                        定更新頻率,例如:1.0/20.0表示每秒更新20次
          (6.4)startGyroUpdatesToQueue:withHandler: 持續更新陀螺儀資料。
          (6.5)取得XYZ值得幾種情況:

範例程式:
var  window:  UIWindow?
lazy  var  manager  =  CMMotionManager()
lazy  var  queue  =  NSOperationQueue()

func  application(application:  UIApplication, didFinishLaunchingWithOptions  launchOptions:
[NSObject  :  AnyObject]?)  ->  Bool  {


if  manager.gyroAvailable{

if  manager.gyroActive  ==  false{

manager.gyroUpdateInterval  =  1.0  /  40.0

manager.startGyroUpdatesToQueue(queue,
withHandler:  {(data:  CMGyroData!,  error:  NSError!)  in

println("Gyro  Rotation  x  =  \(data.rotationRate.x)") println("Gyro  Rotation  y  =  \(data.rotationRate.y)") println("Gyro  Rotation  z  =  \(data.rotationRate.z)")

})

}  else  {
println("Gyro  is  already  active")
}

}  else  {
println("Gyro  isn't  available")
}
return  true
}



留言

張貼留言

您好:
歡迎到訪我的Blog,這裡有我的生活經驗、美好的回憶和程式開發經驗分享~
目前努力學習Swift中,希望你會喜歡Swift!
如果可以也請你留言給我一個鼓勵喔!
謝謝

熱門文章