iOS Core Motion基本使用
Core Motion可以讓開發者從各個內建感測器那裡獲取未經修改的感測資料,並觀測或響應裝置各種運動和角度變化。通過這些感測器可以獲取加速度值,陀螺儀值,裝置motion值等。
CoreMotionManager
CoreMotionManager類能夠使用到裝置的所有移動資料(motion data),Core Motion框架提供了兩種對motion資料的操作方式,一個是"pull",另一個是"push",其中"pull"
方式能夠以CoreMotionManager的只讀方式獲取當前任何感測器狀態或是組合資料。"push"方式則是以塊或者閉包的形式收集到你想要得到的資料並且會在特定週期內得到實時的更新。
push:提供一個執行緒管理器NSOperationQueue和一個回撥Block,CoreMotion自動在每一個取樣資料到來的時候回撥這個Block,進行處理。在這種情況下,Block中的操作會在你自己的主執行緒內執行
pull:你必須主動去向CMMotionManager要資料,這個資料就是最近一次的取樣資料。你不去要,CMMotionManager就不會給你,在這種情況下,Core Motion所有的操作都在自己的後臺執行緒中進行,不會有任何干擾你當前執行緒的行為
Core Motion的基本使用:初始化->獲取資料->處理資料->不需要時 停止獲取資料, 為了保證效能,蘋果建議在使用CoreMotionManager的時候採用單例模式。
-(void)stopAccelerometerUpdates;//停止獲取加速度計資料
-(void)stopGyroUpdates;//停止獲取陀螺儀資料
-(void)stopDeviceMotionUpdates;//停止獲取裝置motion資料
CoreMotion主要負責三種資料:
加速度值CMAccelerometerData
陀螺儀值CMGyroData
裝置motion值CMDeviceMotion
CMDeviceMotion屬性介紹:
attitude:通俗來講,就是告訴你手機在當前空間的位置和姿勢
gravity:重力資訊,其本質是重力加速度向量在當前裝置的參考座標系中的表達
userAcceleration:加速度資訊
rotationRate:即時的旋轉速率,是陀螺儀的輸出
CMMotionManager *mManager = [[CMMotionManager alloc] init];
_mManager = mManager;
//加速度器檢測
if ([mManager isAccelerometerAvailable]) {//是否可用
NSLog(@"Accelerometer is available");
}else{
NSLog(@"Accelerometer is not available");
}
if ([mManager isAccelerometerActive]) {//是否啟動
NSLog(@"Accelerometer is active");
}else{
NSLog(@"Accelerometer is not actiove");
}
//陀螺儀檢測
if ([mManager isGyroAvailable]) {
NSLog(@"Gryro is available");
}else{
NSLog(@"Gryro is not available");
}
if ([mManager isGyroActive]) {
NSLog(@"Gryo is active");
}else{
NSLog(@"Gryo is not active");
}
/************************獲取加速度***********************/
//1.push 方式
if ([mManager isAccelerometerAvailable] ) {
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
mManager.accelerometerUpdateInterval = 0.01;
[mManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData * _Nullable accelerometerData, NSError * _Nullable error) {
NSLog(@"X = %.04f, Y = %.04f, Z = %.04f",accelerometerData.acceleration.x, accelerometerData.acceleration.y, accelerometerData.acceleration.z);
}];
}
//2.pull方式 備註:pull方式獲取acceletation資料,需要自己實現計時器功能
if ([mManager isAccelerometerAvailable]) {//是否可用
NSLog(@"111Accelerometer is available");
mManager.accelerometerUpdateInterval = 0.01;//頻率100HZ
[mManager startAccelerometerUpdates];//開始更新
}
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateAccelerometer) userInfo:nil repeats:YES];
[timer fire];
/************************獲取陀螺儀***********************/
if ([mManager isGyroAvailable]) {
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
mManager.accelerometerUpdateInterval = 0.01;
[mManager startGyroUpdatesToQueue:queue withHandler:^(CMGyroData * _Nullable gyroData, NSError * _Nullable error) {
NSLog(@"X = %.04f, Y = %.04f, Z = %.04f",gyroData.rotationRate.x, gyroData.rotationRate.y, gyroData.rotationRate.z);
}];
}
參考:http://www.cocoachina.com/ios/20141103/10111.html
相關文章
- IOS 特定於裝置的開發:Core Motion基礎iOS
- iOS WKWebView 基本使用iOSWebView
- 在 iOS 11 中使用 Core BluetoothiOS
- iOS UIScrollView的基本使用iOSUIView
- iOS NSOperation的基本使用iOS
- iOS - UILayoutGuide的基本使用iOSGUIIDE
- iOS 鑰匙串的基本使用iOS
- Linux iostat命令基本使用LinuxiOS
- Linux使用基本知識:CORE檔案(轉)Linux
- 如何使用iOS 9的Core Spotlight框架iOS框架
- iOS開發之使用Git的基本使用(二)iOSGit
- iOS開發之使用Git的基本使用(一)iOSGit
- iOS CocoaPods簡介及基本使用iOS
- IOS CoreLocation中CLLocationManager類的基本使用iOS
- text-to-motion
- ASP.Net Core 2.2 MVC入門到基本使用系列 (五)ASP.NETMVC
- iOS UI-表格控制器(UITableView)-基本使用iOSUIView
- iOS開發-WKWebView的介紹與基本使用iOSWebView
- Core Location框架基本概念理解框架
- iOS UIView基本動畫iOSUIView動畫
- iOS開發- UILabel的基本介紹與使用iOSUI
- Automatic Duck Xsend Motion Mac(fcpx專案轉換Motion工具)Mac
- iOS開發之Core AnimationiOS
- Pixel Film Studios - FCPX Motion Blur for Mac(運動模糊效果fcpx外掛)iOSMac
- iOS開發-列表檢視的基本介紹與使用iOS
- iOS動畫系列之三:Core AnimationiOS動畫
- iOS——Core Animation 知識摘抄(二)iOS
- iOS——Core Animation 知識摘抄(三)iOS
- iOS——Core Animation 知識摘抄(一)iOS
- iOS——Core Animation 知識摘抄(四)iOS
- iOS Core Animation 簡明系列教程iOS
- iOS開發——Core Graphics繪圖iOS繪圖
- ASP.NET Core 中介軟體基本用法ASP.NET
- ASP.NET Core 依賴注入基本用法ASP.NET依賴注入
- iOS開發UI篇--iOS動畫(Core Animation)總結iOSUI動畫
- iOS 元件化開發(一):遠端私有庫的基本使用iOS元件化
- OpenCV (iOS)基本繪圖(5)OpenCViOS繪圖
- iOS系統相簿基本操作iOS