iOS 加速計和陀螺儀

來源:互聯網
上載者:User

標籤:介紹   屬性   間隔   post   size   錯誤   .com   void   gpo   

  一、概念

加速計:通過感知特定方向的慣性力總量,測量x,y,z軸三個方向的加速度。

陀螺儀:測量繞x、y、z 三個方向的旋轉的值。特性:如果保持手機平放的同時旋轉它,加速計的值不會改變,此時它將是繞 Z 軸的旋轉值發生改變。順時針旋轉裝置將產生負值,逆時針旋轉產生正值。

二、 CoreMotion架構

加速計和陀螺儀是通過  Core Motion 架構訪問的。此架構提供了 CMMotionManager等類,該類提供的所有資料都用來描述使用者如何行動裝置。

    Core Motion 擷取資料的兩種方式:

         push :  即時採集所有資料,採集頻率高;

         pull  :  在有需要的時候,才去採集資料;

加速計 :

      push:   - (void)startAccelerometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMAccelerometerHandler)handler;

 

     pull:     - (void)startAccelerometerUpdates; 

 

     判斷加速計是否可用:

     @property(readonly, nonatomic, getter=isAccelerometerAvailable) BOOL accelerometerAvailable;

  

    設定加速計採樣的時間間隔:

     @property(assign, nonatomic) NSTimeInterval accelerometerUpdateInterval;

 

陀螺儀 :

     push:    - (void)startGyroUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMGyroHandler)handler;

 

     pull:       - (void)startGyroUpdates;

    

   判斷陀螺儀是否可用:

    @property(readonly, nonatomic, getter=isGyroAvailable) BOOL gyroAvailable;

   

     設定陀螺儀採樣的時間間隔:

     @property(assign, nonatomic) NSTimeInterval gyroUpdateInterval;

 

磁力 :

    push:    - (void)startMagnetometerUpdatesToQueue:(NSOperationQueue *)queue withHandler:(CMMagnetometerHandler)handler;

     

     pull:       - (void)startMagnetometerUpdates;

    

    判斷磁力是否可用:

     @property(readonly, nonatomic, getter=isGyroAvailable) BOOL gyroAvailable

  

     設定磁力採樣的時間間隔:

     @property(assign, nonatomic) NSTimeInterval magnetometerUpdateInterval

 

範例程式碼:

    

  

 檢測搖動

   方式一 : 在正常使用中,3個軸上的註冊值高達1.3g,但擷取比該值更大的值通常需要特意施加力量。加速計不太可能註冊比 2.3g 更大的值,所以不需要設定比該值更大的值。要檢測搖動,我們可以通過檢查比1.5大的絕對值來檢測細微搖動,通過檢查比 2.0更大的值來檢測強烈的搖動。

   檢測任何軸上的力大於2.0g的任何運動:

    

   我們可以實現更複雜的搖動檢測,要求使用者來回搖動一定次數以註冊為搖動:

 

 

 方式二 :

 還有一種檢測搖動的方法,這種方法被結合到了響應者鏈中。iOS提供了3個類似的響應程式方法來檢測動作:

    動作開始時:  - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;

   

    動作結束時: - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event;

 

    動作取消時: - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event;(搖動期間電話響鈴或其他幹擾動作) 

 

 三、 感知裝置移動

    除了擷取加速度資料、陀螺儀資料和磁場資料之外,CMMotionManager 還可以用於感知裝置移動資料。與前擷取加速度資料、陀螺儀資料、磁場資料的方式完全相同,程式可通過如下兩種方式來感知裝置的移動資料。

    

    使用基於代碼的方式擷取裝置移動資料;

    使用哪個周期性主動請求的方式擷取裝置移動資料;

 

  擷取裝置移動資料時, CMMotionManager將會返回一個 CMDeviceMotion對象,該對象包含如下屬性:

  attitude:該屬性返回裝置的方位資訊。該屬性的分那會至是一個 CMAttitude 類型的對象,該對象包含roll、pitch、yaw  3個歐拉角的值,通過這3個值即可擷取該裝置的空間方位;

   

  rotationRate:該屬性返回原始的陀螺儀資訊,該屬性值為 CMRotationRate 結構體變數,該屬性值基本等同於前面介紹的陀螺儀資料;

  

  gravity: 該屬性返回地球重力對該裝置在  X、Y、Z軸上施加的重力加速度;

 

  userAcceleration:該屬性返回使用者外力對該裝置在 X、Y、Z軸上施加的重力加速度;

 

  magneticField:該屬性返回校準後的磁場資訊。該屬性值是一個 CMCalibratedMagneticField 結構體變數。CMCalibratedMagneticField 類型的變數包括 field 和 accuracy兩個欄位,其中 field 代表 X、Y、Z  軸上的磁場強度, accuracy 則代表磁場強度的精度;

  

四、iOS 7新增的計步器

  iOS 7新增的 CMStepCounter 作為計步器,該計歩器可以擷取使用者攜帶該裝置行走的步數, iOS裝置通過手機內建硬體來儲存使用者行走的步數。程式通過該類即可擷取使用者當前行走的步數,也可查詢使用者行走的曆史活動資料。

  

  注意:iOS 8 用  CMPedometer 代替。

   iOS 8 新增的 CMPedometer 代替 iOS 7 的 CMStepCounter 作為計步器,該計步器可以擷取使用者攜帶該裝置行走的步數。該類包含如下幾個方法:

  該方法跟 CMStepCounter 一樣,判斷計步器服務是否可用:

     + (BOOL)isStepCountingAvailable;

  判斷計算距離是否可用:

     + (BOOL)isDistanceAvailable;

  判斷計算層樓測量是否可用:

     + (BOOL)isFloorCountingAvailable;

 該方法進行即時測量,第一個參數是指進行即時測量的開始時間;第二個參數是 block ^(CMPedometerData *pedometerData, NSError *error);其中 pedometerData 為測量資料,error 為測量錯誤資訊:

   -(void)startPedometerUpdatesFromDate:(NSDate*)start withHandler:(CMPedometerHandler)handler;

   停止計步服務:

  -(void)stopPedometerUpdates;

 

 第一個參數為開始時間;第二個參數為結束時間;第三個參數為 block^(CMPedometerData *pedometerData, NSError *error);其中 pedometerData  為測量資料, error 為測量錯誤資訊。

 

-(void)queryPedometerDataFromDate:(NSDate*)start toDate:(NSDate*)end withHandler:(CMPedometerHandler)handler;

      

iOS 加速計和陀螺儀

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.