我是加速器,我可以得知iOS的X、Y、Z軸方向的傾斜狀況
iOS傾斜方向值的變化參考圖,其中X軸往右是表示正數、往左是表示負數,Y軸往上是表示正數、往下是表示負數,Z軸表示表示正反面,正面為-1、背面為1
第1步:建立一個名為"Accelerometer"專案。
第2步:設置畫面與IBOutlet
- 如入6個UILabel標籤,用以表示X、Y、Z軸的標題與值
- 為表示X、Y、Z值的UILabel標籤設置Outlet,分別是xLabel、yLabel與zLabel
第3步:加入CoreMotion.framework至專案中
- 選取TARGETS中的預設Target - Accelerometer,選Build Phases後按"+"號
- 搜尋CoreMotion,在選取framework後按Add
第4步:透過CMotionManager取得加速器資料
- 於ViewController.h檔中,引用CoreMotion.h
- 並加入motionManager實體變數,以存放後續取得的CMMotionManager物件
ViewController.h
#import <UIKit/UIKit.h>
#import <CoreMotion/CoreMotion.h>
@interface ViewController : UIViewController
{
CMMotionManager *motionManager;
}
@property (strong, nonatomic) IBOutlet UILabel *xLabel;
@property (strong, nonatomic) IBOutlet UILabel *yLabel;
@property (strong, nonatomic) IBOutlet UILabel *zLabel;
@end
- ViewController.m檔中的viewDidLoad方法中,透過CMotionManager取得加速器資料
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//建立CMMotionManager物件
motionManager = [[CMMotionManager alloc] init];
//取得目前的執行緒駐列
NSOperationQueue * queue = [NSOperationQueue currentQueue];
//透過startAccelerometorUpdatesToQueue開始取得XYZ軸的訊息,
//參數1帶入queue,以在此執行緒駐列執行取得資料的block,
//參數2即為一個block,其中將取得的XYZ資料輸出至xLabel、yLabel與zLabel上顯示
[motionManager startAccelerometerUpdatesToQueue:queue
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
CMAcceleration acceleration = accelerometerData.acceleration;
self.xLabel.text = [NSString stringWithFormat:@"%f", acceleration.x];
self.yLabel.text = [NSString stringWithFormat:@"%f", acceleration.y];
self.zLabel.text = [NSString stringWithFormat:@"%f", acceleration.z];
}];
}
第5步:執行
- 以實機執行,數據會不XYZ軸的數據會不斷的更新
檔案連結:Accelerometer.zip