CoreMotionを使ってみる

スタンフォード大が公開しているCS 193P iPhone Application Development(http://www.stanford.edu/class/cs193p/cgi-bin/drupal/)の授業を参考にしながら、iOS4.0から追加されたCoreMotionFrameworkを実験中。

CMMotionManagerを使用すると、加速度(CMAccelerometerData)、ジャイロのデータ(CMGyroData)、デバイスの姿勢など(CMDeviceMotion)の情報を取得できる。

CMGyroData, CMDeviceMotionはiPhone4のみ取得可能。(iPod touch 4Gは未確認)

取得方法は2種類

CMMotionManagerが新しいサンプルを取得する度に、あらかじめ指定したBlockを実行する。(PUSH)
CMMotionManagerの値をNSTimerなどを使って、任意のタイミングで取得する。(PULL)

今回はPUSHの方法で、加速度のデータを取得してみた。

#import <UIKit/UIKit.h>
#import <CoreMotion/CoreMotion.h>
@interface MotionSampleViewController : UIViewController {

	CMMotionManager *motionManager;

}

- (IBAction)startUpdate:(id)sender;
- (IBAction)stopUpdate:(id)sender;
@property (nonatomic, retain) CMMotionManager *motionManager;

@end
#import "MotionSampleViewController.h"

@implementation MotionSampleViewController

@synthesize motionManager;


- (void)setupMotionManager{
	CMMotionManager *manager = [[[CMMotionManager alloc] init] autorelease]; //CMMotionManagerの生成
	self.motionManager = manager;
	manager.accelerometerUpdateInterval = 10.0 / 60.0; //CMMotionManagerが1秒に何回データを取得するか指定する
}


	

- (IBAction)startUpdate:(id)sender{
	
	if (!self.motionManager) {
		[self setupMotionManager]; //CMMotionManagerの生成
	}
	if (! motionManager.accelerometerAvailable) {
		return; //motionManagerがaccelerometerを利用できないときはreturn
	}
	
	if ( ![self.motionManager isAccelerometerActive]) {
		
		//motionManagerがaccelerometerを使用中かチェック
		
		NSOperationQueue *opQueue = [[[NSOperationQueue alloc] init] autorelease];
		[self.motionManager startAccelerometerUpdatesToQueue:opQueue 
												 withHandler:^(CMAccelerometerData *data, NSError *error) {
													 
													 //新しい加速度のデータを取得する度にこのブロックを実行する
													 
													 dispatch_async(dispatch_get_main_queue(), ^{
														 
														 NSLog(@"加速度のデータ:%@",data);
														 
													 });
												 }];
		
	}
	
}

- (IBAction)stopUpdate:(id)sender{
	[self.motionManager stopAccelerometerUpdates];
}






- (void)dealloc {
	[self.motionManager stopAccelerometerUpdates];
	self.motionManager = nil;
    [super dealloc];
}

@end

Block,GrandCentralDispatch周りをまだ完全に理解できていない(^_^;)

広告

UIWebViewとVideoタグで簡単ムービー再生

UIWebViewを使用してアプリ内でMP4動画を再生する。

あらかじめInterface BuilderでUIWebViewを配置し、アウトレットを接続しておく。

ヘッダファイル

IBOutlet UIWebView *webView;

実装ファイル

- (void)viewDidLoad{
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
    NSURL *url = [NSURL fileURLWithPath:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
}

Sample.html


<!DOCTYPE html> 
<html> 
    <head> 
        <meta charset="UTF-8"> 
   </head> 
    <body>
        <video src="sample.mp4"  controls autobuffer>
	</video>
    </body>
</html>