MD Blog

誰かの何かに役に立てることを書いていきたいです

超簡単にiOSへシェイクジェスチャー検知を実装する方法

シェイクジェスチャーを検知したいUIViewControllerに以下のコードを記述してください。

- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
    {
        NSLog(@"Motion began");
    }
}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
    {
        NSLog(@"Motion cancelled");
    }
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if(event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake)
    {
        NSLog(@"Motion ended");
    }
}

motionCancelledは、motionがbeganしたけどendedしなかったとき、一定時間経つと呼ばれるようです。

beganしたけどendedしない状況は、弱く振ったときにあらわれました。

 

動作環境

iPhone4 iOS5.0

 

参考文献

how to detect and program around shakes for the iphone - Stack Overflow

http://stackoverflow.com/questions/1340492/how-to-detect-and-program-around-shakes-for-the-iphone

iPhone開発メモ シェイク - WillCraft Blog

http://blog.willcraft.jp/archives/1134