今回は、iPhone,ipod,ipad に内蔵されている加速度センサーを使って、x,y,zの加速度を取得する方法について説明します。 加速度センサーとは、自由落下に対するデバイスの加速度を計測します。1の値はデバイスに1G の重力がかかっていることを示します(1G の重力は、デバイスが静止状態の時に感じる地球の重力)。加速度センサーはデバイスの加速度を X、Y、および Z の3軸方向で計測します。
912-1 今回作成するアプリは、3軸の加速度を取得し、ラベルに表示します。加えて、デバイスを左右に振る(傾ける)と、現在時刻を表示するというものです。 まず、加速度センサーを扱うには、UIAccelerometerを利用します。 XCode を起動し、View Based Application で新規プロジェクトを作成します。 今回は、「Accelerometer」という名前にしています。 Accelerometer.h を開き、以下のように設定します。

#import <UIKit/UIKit.h>

@interface AccelerometerViewController : UIViewController <UIAccelerometerDelegate> {

 

 IBOutlet UILabel *xLabel;

 IBOutlet UILabel *yLabel;

 IBOutlet UILabel *zLabel;

 

 IBOutlet UILabel *clockLabel;

 double accelX, accelY, accelZ;

}

@end

まず、加速度センサーを利用するために、UIAccelerometerDelegate を定義します。これで、UIAccelerometer のイベントを認識するようになります。 IBOutlet は、view 上にx,y,zの値を表示させるためのラベルと、デバイスが振られた時に、現在時刻を表示するラベルです。 doubel の行は、x,y,z の値を扱うための変数です。 Accelerometer.h を保存してください。 次に、AccelerometerViewController.xib をダブルクリックし、Interface Builder を起動します。 以下の画像のようになるように、ラベルを配置し、Outlet を接続してください。 912-2完了したら、保存して Interface Builder を終了します。 最後に、Accelerometer.m を開き、viewDidLoad メソッドと accelerometer メソッドを以下のように設定してください。

– (void)viewDidLoad {

 UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];

accel.delegate = self;

accel.updateInterval = 1.0f/10.0f;

 

[super viewDidLoad];

}

– (void)accelerometer:(UIAccelerometer *)acel

didAccelerate:(UIAcceleration *)acceleration {

accelX = acceleration.x;

accelY = acceleration.y;

accelZ = acceleration.z;

 

 

xLabel.text =[NSString stringWithFormat:@”x: %g”, acceleration.x];

yLabel.text = [NSString stringWithFormat:@”y: %g”, acceleration.y];

zLabel.text = [NSString stringWithFormat:@”z: %g”, acceleration.z];

 

NSLog(@”x: %g”, acceleration.x);

NSLog(@”y: %g”, acceleration.y);

NSLog(@”z: %g”, acceleration.z);

 

if (acceleration.y >= –0.5) {

NSDateFormatter *df = [[NSDateFormatter alloc] init];

df.dateFormat  = @”yyyy/MM/dd HH:mm:ss”;

NSString *str = [df stringFromDate:[NSDate date]];

clockLabel.text = str;

}

 

 

}

上記のコードは、viewDidLoad 内で、updateInterval で読み取り間隔を設定しています。 accelerometer 内の acceleration.x によって、x軸の加速度の値を取得し、ラベルに表示させています。取得した各値をそれぞれラベルに表示させています。 さらに、動きを確認するために、NSLogもセットしています。 最後の if文は、acceleration.y が、「-0.5」以上になれば、clockLabel に現在時刻がセットされるようにしています。 これで保存し、デバイス上で、ビルド&実行することで、動作確認出来ます。 現在時刻の取得 http://iphone-tora.sakura.ne.jp/nsdate.html 加速度センサー http://d.hatena.ne.jp/moto_maka/20090510/1241898972 http://japan.internet.com/developer/20100803/26.html

この投稿へのコメント

コメントはまだありません。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA


ピックアップ記事

お名前.com VPS サーバでphp アップデート

2011年04月25日 過去Blog
まず、ファイアーウォールからSSHを許可 http://guide.onamae-server.com/vps/3/31/81/124/ ステム設定 > セキュリティー > アップデートからアップデートなし(上級者向け)に変更。これでyumコマンドが使えるようになる。 サーバ管理画面上から システム設定>ユーザ>一般アカウント で一般ユーザのアカウントを作成。 Macのターミナ…
「お名前.com VPS サーバでphp アップデート」をはてなブックマークに追加

iPhoneのマルチタスク時の不要なメモリ解放

2011年01月05日 過去Blog
タイトルの通りですが、マルチタスクのメモリを解放する方法は、ホームボタンをダブルクリックして、起動中のアプリを表示させ、削除したいアプリを長押しすれば、削除ボタンが現れて削除可能になります。 どうも手動で管理しないといけないというのは、不便ですね。 他にもっと良い方法はないんでしょうかね( ? _ ? ) ご存知の方は、是非コメント下さい(^_^)
「iPhoneのマルチタスク時の不要なメモリ解放」をはてなブックマークに追加

iPhoneからWordPressへの画像のアップロードに失敗する

2011年01月12日 過去Blog
Wi-Fi環境でエラーが連続したので、3Gにしてみると、一定のサイズまでは正常にアップロードされ、サイズが少し大きくなると途中でエラーになります。 Word Press側の問題なのか、なんなのか切り分け出来なかったので、いろいろ調べていると、Word Press 本体のバージョンアップをすれば、直るという記事を見つけたので、一度、試してみようと、WP管理画面上から、自動アップグレードを実行すると…
「iPhoneからWordPressへの画像のアップロードに失敗する」をはてなブックマークに追加

UIActionSheet を複数使った場合のメソッドの振り分け

2011年05月03日 過去Blog
1つのクラスファイル内で、複数のUIActionSheetを使う時はtagプロパティを使って、どのアクションシートのボタンがクリックされたのかを判別します。 actionsheet.tag = 1; 詳しくは以下のサイトを参照。 http://technical-iphone.blogspot.com/2010/05/uiactionsheet.html
「UIActionSheet を複数使った場合のメソッドの振り分け」をはてなブックマークに追加

php MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する

2010年03月30日 過去Blog
select c1,c2,c3 from A union all select c1,c2,c3 from B 参照元:http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1115439551 divorce lawyer san diego…
「php MySQL 2つのテーブルを縦に並べて結合(union)し、結果を抽出する」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy