Core Motion
處理加速計讨跟、陀螺儀、計步器和環(huán)境相關(guān)事件的框架。
概覽
CoreMotion 會報告來自于iOS硬件設(shè)備的運動數(shù)據(jù)和環(huán)境數(shù)據(jù)趾断,包括加速計和陀螺儀還有計步器绍申、磁力計噩咪、氣壓力計。您可以使用此框架訪問硬件當(dāng)前生成的數(shù)據(jù)极阅,然后在App中使用胃碾。例如游戲可能會使用陀螺儀和加速計來控制屏幕上的行為。比如我們可能都玩過用手機把一個小球穩(wěn)定在某一個點筋搏。
重要的是這些值蘋果有給我們處理了一個比較合理的值仆百,例如一個經(jīng)過處理的加速度計值只反映用戶造成的加速度,而不是重力加速度奔脐。當(dāng)然也可以訪問原始值俄周。通常我們會使用 DeviceMotion 這是蘋果給我們處理了一個返回的對象。
ps:iOS 10 之后的設(shè)備有些特定的傳感器必須在 info.plist 里包含使用說明例如訪問健康相關(guān)帖族,未能添加將導(dǎo)致崩潰
綜上所有傳感器栈源,此篇文章將說明DeviceMotion獲取的復(fù)合數(shù)據(jù):
獲取陀螺儀事件:
從硬件接收事件
概覽
陀螺儀會測量硬件設(shè)備圍繞空間坐標軸旋轉(zhuǎn)的角度,iOS設(shè)備上基本上都有一個三軸陀螺儀竖般,如圖甚垦,旋轉(zhuǎn)值以給定軸周圍的弧度每秒為單位。根據(jù)旋轉(zhuǎn)的方向給定值有可能是正數(shù)或負數(shù)
使用:
可以使用CoreMotion 框架訪問陀螺儀數(shù)據(jù)涣雕。具體就是CMMotionManager類提供了啟用陀螺儀硬件的接口艰亮,需要注意啟動之前要檢查陀螺儀是否可用有個屬性 isGyroAvailable已驗證陀螺儀是否可用。
有兩種方式可以獲得值:第一種主動獲取第二種要求框架定期向應(yīng)用程序推送更新挣郭。通過實際編碼發(fā)現(xiàn)都是需要定時器迄埃,只不過主動獲取需要我們自己定義定時器稍后從代碼體現(xiàn)。
1兑障、獲取原始值
2.利用DeviceMotion實現(xiàn)一些小功能
注意DeviceMotion.gravity 返回的值范圍值 -1 --- 1 用(三個點)來表示當(dāng)前運動三維坐標
這里寫下一個我的疑惑:剛開始看到加速計和陀螺儀是感覺他們從原理上沒有任何區(qū)別侄非,后來通過搜索發(fā)現(xiàn):加速計只能偵測物體的移動行為并不具備精確偵測物體角度改變的能力。而陀螺儀可以偵測物體的水平改變的狀態(tài)流译,但無法計算物體移動的激烈程度逞怨。也搜了一下現(xiàn)在飛機上面也都是用陀螺儀和加速計復(fù)合計算航線、角度等這里還學(xué)到了一個新函數(shù)atan2()感興趣的可以看下
<u>https://blog.csdn.net/zaijianbali/article/details/40685465?_t=t</u>