加速度センサーメモ
加速度センサーを使っての処理。
自分が行っている方法。
プロジェクトはOpenGLをベースとして新規作成をした場合です。
// AppDelegate.h @class EAGLView; @interface AppDelegate : NSObject <UIAccelerometerDelegate> { UIWindow *window; EAGLView *glView; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet EAGLView *glView; @end
//AppDelegate.m #import "AppDelegate.h" #import "EAGLView.h" @implementation AppDelegate @synthesize window; @synthesize glView; - (void) applicationDidFinishLaunching:(UIApplication*)application { glView.animationInterval = 1.0 / 60.0; [glView startAnimation]; [[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 40.0)]; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; } - (void) accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration { [glView updateAccelerometer:accelerometer.x Y:accelerometer.y Z:accelerometer.z]; } @end
// EAGLView.m - (void) updateAccelerometer:(float)x Y:(float)y Z:(float)z { // 値を色々と計算 }
上の場合だと、アプリが起動したら1.0/40.0の間隔で処理を行います。
これだと、ずっと加速度センサーが起動しっぱなしになるため、バッテリーの消耗が激しくなります。
必要な場合にONにし、使わない時はOFFにすべきです。
OFFにするには、
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
nilを指定するだけ。
再度ONにする場合、EAGLView等から変更したい場合は、
AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate]; [[UIAccelerometer sharedAccelerometer] setDelegate:app];
こんな感じ。
にしても、バッテリー消費激しい・・・。