Accelerometer / 加速器 / 重力控制器 / 水平儀的基本使用方法

From: http://furnacedigital.blogspot.tw/2010/11/accelerometer.html
 
 
 
Accelerometer Sensor 感應器的基本使用方法,首先必須先在 ViewCotroller.h 中設定代理。設定代理之後才能正常使設定與取得 Accelerometer Sensor 的相關參數,其程式碼如下所示。(View-based Template)

1
@interfaceAccelerometerViewController :UIViewController<UIAccelerometerDelegate> {

首先設定 Accelerometer Sensor 的偵測頻率。

1
2
3
4
5
6
7
8
9
10
11
- (void)viewDidLoad {
    [superviewDidLoad];
 
    UIAccelerometer*theAccel = [UIAccelerometersharedAccelerometer];
 
    //設定偵測頻率每秒10次
    theAccel.updateInterval =1.0f/10.0f;
 
    //設定委派對象給自己(ViewController)
    theAccel.delegate =self;
}

接下來從 Accelerometer Sensor 中取得相關參數。

1
2
3
4
5
6
7
8
9
10
11
12
//啟用Accelerometer Sensor
- (void) accelerometer:(UIAccelerometer*) meter didAccelerate: (UIAcceleration*) accel {
 
    //將Accelerometer Sensor XYZ軸的數值正規化之後傳至的Label上
    xLabel.text = [NSStringstringWithFormat:@"%8f", accel.x];
    yLabel.text = [NSStringstringWithFormat:@"%8f", accel.y];
    zLabel.text = [NSStringstringWithFormat:@"%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 目前的擺設狀況。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    //宣告一個UIDevice指標,並取得目前Device的狀況
    UIDevice*device = [UIDevicecurrentDevice] ;
 
    //取得當前Device的方向,來當作判斷敘述。(Device的方向型態為Integer)
    switch(device.orientation) {
        caseUIDeviceOrientationFaceUp:
            orientationLabel.text =@"螢幕朝上平躺";
            break;
 
        caseUIDeviceOrientationFaceDown:
            orientationLabel.text =@"螢幕朝下平躺";
            break;
 
        //系統無法判斷目前Device的方向,有可能是斜置
        caseUIDeviceOrientationUnknown:
            orientationLabel.text =@"未知方向";
            break;
 
        caseUIDeviceOrientationLandscapeLeft:
            orientationLabel.text =@"螢幕向左橫置";
            break;
 
        caseUIDeviceOrientationLandscapeRight:
            orientationLabel.text =@"螢幕向右橫置";
            break;
 
        caseUIDeviceOrientationPortrait:
            orientationLabel.text =@"螢幕直立";
            break;
 
        caseUIDeviceOrientationPortraitUpsideDown:
            orientationLabel.text =@"螢幕直立,上下顛倒";
            break;
 
        default:
            orientationLabel.text =@"無法辨識";
            break;
    }
 
}

2 則留言:

  1. 匿名3/11/2012

    請問一定要繼承UIViewController嗎?
    如果說只是繼承NSObject可以嗎?

    回覆
     
     
  2. 當然可以,主要是要在類別加上採納協定的名稱 ,你才有辦法在該類別內實作感應器的方法,上述範例只有 UIViewController 類別,並沒有衍生其他新的類別,所以只好寫在這邊,造成您的誤會不好意思。

     
arrow
arrow
    全站熱搜

    zer931 發表在 痞客邦 留言(0) 人氣()