加速度センサーメモ

加速度センサーを使っての処理。
自分が行っている方法。
プロジェクトは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];

こんな感じ。



にしても、バッテリー消費激しい・・・。