RSS

iPhone:本体のシェイクをmotionEndedとUIEventSubtypeMotionShakeで検出する

iPhoneのシェイク判定をOS 3.0で実装されたmotionEndedを使って検出する(細かいシェイク分けをしたいときは,加速度センサを読むんだろうけど,単純な処理ならばmotionEndedで事足りる).処理の大まかな流れは,シェイクを検出して,その状態を通知する.そして,通知を拾って処理をする.ドキュメントを参考にして書いたので,最適ではないかもしれません.最適な方法をご存知の方は,ご教授ください.

ブログでは見にくいので,サンプルコードを用意しました.興味ある人は,ココからどうぞ.使用条件は自己責任です.このサンプルをアプリに参考・組込する/した方は可能ならばそのアプリを教えてください.Sample code is here for notification of iPhone shaking by motionEnded. This license is "your own risk" and "please teach me your applications".

1. UIWindow(例ばMyWindow)を作る.hファイルは触らずに,mファイルにmotionEndedメソッドを書いて,Notificationの準備(通知名はshakeをしました)をする.なぜかUIViewControllerにコレを書くと動かない.誰か教えてください.
@implementation MyWindow
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake )
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"shake" object:self];
}
}
@end

2. 自作のUIWindowを組み込む.テンプレートから作ってる人は,*AppDelegateのファイルを書き換える.xibも忘れずに.

3. UIViewControllerで通知を拾う処理を描く.
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(actionByShake) name:@"shake" object:nil];
}

-(void)actionByShake
{
NSLog(@"Your code when shaking");
}

Bookmark and Share

0 コメント: