內置加速計是智能手機最酷的特性之一,ios可以通過這個小設備知道用戶握持手機的方式,以及用戶是否移動了手機,ios使用加速計處理自動旋轉,並且許多游戲都是用它作為控制機制,它還可以用於檢測搖動和其他突發的運動,此功能在iphone4之後得到進一步的拓展,還包括了一個內置的陀螺儀,可用於確定設備的方向與每條坐標軸之間的夾角。
第一 加速計
通過感知特定方向的慣性力總量,加速計可以測量出加速度和重力,ios設備內的加速計是一個三軸加速計,這意味著它能夠檢測出三維空間中的運動或重力引力。因此加速計不但可以指示握持電話的方式(如自動旋轉功能),而且如果電話放在桌子上的話還可以指示電話的正面朝上還是朝下。
加速計可以測量g引力(g代表重力),因此加速計返回值為1.0時,表示在特定的方向上感知到1g。
1 .如果是靜止握持iphone而沒有任何運動,那麼地球引力對其施加的力大約為1g
2. 如果是縱向豎直握持,那麼設備會檢測並報告在其y軸上施加的力大約為1g
3.如果是以一定的角度握持,那麼1g的力會分布到不同的軸上,這取決於握持的方式,在以45度握持時,1g的力會均勻的分解到兩個軸上。如果檢測到加速計值遠大於1g,那麼可以判斷是突然運動,,正常使用時加速計在任何一個軸上都不會檢測到遠大於1g的值,如果搖動、墜落或投擲設備,那麼加速計便會在一個或多個軸上檢測到很大的力
下圖所示加速計所使用的三軸結構
第二 陀螺儀
陀螺儀可用於讀取描述設備圍繞其軸的旋轉的值。
如果其傳感器與加速計之間的區別看起來不那麼明顯,可以考慮平放在桌面上的iphone,如果在保持電話平放時旋轉它,加速計的值不會改變,這是因為讓電話移動的力(在這種情況下,只有重力直接施加在z軸上)沒有改變
第三 CoreMotion 和動作管理器
在ios4和更高版本中,加速計和陀螺儀只可以使用CoreMotion框架訪問,此框架提供了CMMotionmanager類(當然還有其他的類),該類用作描述用戶如何移動設備所有值的途徑
cmmotionmanager類實際上不是一個獨立的實體,但應用程序應該將他視為獨立的,應該僅為每個應用程序創建一個CMMotionmanager類,並且使用普通的alloc和init方法