シェイク検出

iPhoneをシェイクした時を検出します。

ViewController.mの一番下 @end の上にコピペで即ウゴです。

実機では少し強めにシェイクしてみてください。

iOSシミュレータでは、メニューのハードウェア▷シェイクジェスチャーで動作します。

コピペで即動く

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event

{

    // モーションがシェイクジェスチャーの場合には、新しい画面を開く

    if (motion == UIEventSubtypeMotionShake) {

        NSLog(@”シェイク);

    }

}

- (BOOL)canBecomeFirstResponder {return YES;}

 


 

フリック、タッチ検出

上下左右フリックとタッチを検出できます。

ViewController.mの一番下 @end の上にコピペで即ウゴです。

注意)フリックはiPhoneの向きと画面回転の有無で検出する状況も変わります。

iPhone縦向きで右フリック▷右フリック検出

iPhone右横向き(画面は左に回転)で右フリック▷右フリック検出

iPhone右横向き(画面回転せず)で右フリック▷上フリック検出

コピペで即動く

//タッチ開始検出

CGPoint _tB;

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

    _tB = [ [touches anyObject] locationInView: self.view ];//タッチ開始位置記録

}

//タッチ終了検出

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

    CGPoint tE = [ [touches anyObject] locationInView: self.view ];//タッチ終了位置記録

    NSInteger xmv = ABS(_tB.x – tE.x);//x方向タッチ移動量

    NSInteger ymv = ABS(_tB.y – tE.y);//y方向タッチ移動量

    if((xmv < 50)&&(ymv < 50)){//タッチの移動量が50以下ならタッチ

        NSLog(@”タッチ);

        return;

    }

    if ( xmv < ymv ) {          //Y方向の移動量が多い場合 上下フリック

        if ( _tB.y > tE.y ) {   //タッチ 開始位置>終了位置 上フリック

            NSLog(@”上フリック);

        } else {                //タッチ 開始位置<終了位置 下フリック

            NSLog(@”下フリック);

        }

    } else {                    //X方向の移動量が多い場合 左右フリック

        if ( _tB.x > tE.x ) {   //タッチ 開始位置>終了位置 左フリック

            NSLog(@”左フリック);

        } else {                //タッチ 開始位置<終了位置 右フリック

            NSLog(@”右フリック);

        }

    }

}