Accelerometer Sensor 感應器的基本使用方法,首先必須先在 ViewCotroller.h 中設定代理。設定代理之後才能正常使設定與取得 Accelerometer Sensor 的相關參數,其程式碼如下所示。(View-based Template)
@interface AccelerometerViewController : UIViewController <UIAccelerometerDelegate> {
首先設定 Accelerometer Sensor 的偵測頻率。
- (void)viewDidLoad {
[super viewDidLoad];
UIAccelerometer *theAccel = [UIAccelerometer sharedAccelerometer];
//設定偵測頻率每秒10次
theAccel.updateInterval = 1.0f/10.0f;
//設定委派對象給自己(ViewController)
theAccel.delegate = self;
}
接下來從 Accelerometer Sensor 中取得相關參數。
//啟用Accelerometer Sensor
- (void) accelerometer:(UIAccelerometer *) meter didAccelerate: (UIAcceleration *) accel {
//將Accelerometer Sensor XYZ軸的數值正規化之後傳至的Label上
xLabel.text = [NSString stringWithFormat:@"%8f", accel.x];
yLabel.text = [NSString stringWithFormat:@"%8f", accel.y];
zLabel.text = [NSString stringWithFormat:@"%8f", accel.z];
//將Accelerometer Sensor XYZ軸的數值正規化後傳至Progress View上
xAxis.progress = ABS(accel.x);
yAxis.progress = ABS(accel.y);
zAxis.progress = ABS(accel.z);
程式碼到這裡已經可以取得 Accelerometer Sensor X、Y、Z 軸的數值。下列程式碼將利用 iOS SDK 內建的功能取得 Device 目前的擺設狀況。
//宣告一個UIDevice指標,並取得目前Device的狀況
UIDevice *device = [UIDevice currentDevice] ;
//取得當前Device的方向,來當作判斷敘述。(Device的方向型態為Integer)
switch (device.orientation) {
case UIDeviceOrientationFaceUp:
orientationLabel.text = @"螢幕朝上平躺";
break;
case UIDeviceOrientationFaceDown:
orientationLabel.text = @"螢幕朝下平躺";
break;
//系統無法判斷目前Device的方向,有可能是斜置
case UIDeviceOrientationUnknown:
orientationLabel.text = @"未知方向";
break;
case UIDeviceOrientationLandscapeLeft:
orientationLabel.text = @"螢幕向左橫置";
break;
case UIDeviceOrientationLandscapeRight:
orientationLabel.text = @"螢幕向右橫置";
break;
case UIDeviceOrientationPortrait:
orientationLabel.text = @"螢幕直立";
break;
case UIDeviceOrientationPortraitUpsideDown:
orientationLabel.text = @"螢幕直立,上下顛倒";
break;
default:
orientationLabel.text = @"無法辨識";
break;
}
}
請問一定要繼承UIViewController嗎?
回覆刪除如果說只是繼承NSObject可以嗎?
當然可以,主要是要在類別加上採納協定的名稱 ,你才有辦法在該類別內實作感應器的方法,上述範例只有 UIViewController 類別,並沒有衍生其他新的類別,所以只好寫在這邊,造成您的誤會不好意思。
回覆刪除請問一下
回覆刪除當ipad裝置鎖定螢幕方向時
就無法感應到目前裝置方向
而變成只有 直、橫
那在xcode中有辦法得知 使用者目前有沒有鎖定方向嗎?
目前沒也看相關的偵測方式,因為他是針對整個硬體做鎖定,並非只有單單一個應用程式,
刪除你可以試著使用 UIInterfaceOrientation 來判斷畫面的方向,如果 Accelerometer Sensor 改變,但是方向沒變就判定為鎖著。
另外, [[UIDevice currentDevice] orientation] 也可以得到目前裝置的方向...
詳見(Constants):https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html
另外,你可以試試看使用
刪除- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
也可以幫助做判斷
板主你好, 我想要讓程式在進入background mode之後還是可以接收accelerometer資料.
回覆刪除看了很多國外的網頁都沒有很懂. 想請教板主有沒有這方面的經驗可以分享? 謝謝!
您好:
刪除可能沒有辦法這樣做喔,你可以參考這篇「偵測 Device 是否支援多工或背景執行的方法」,
http://furnacedigital.blogspot.tw/2011/02/device_23.html
在只有三類型能做背景執行,audio、voip、location(音樂、電話或是定位服務),其他的都不支援唷!
了解. 謝謝.
刪除