1

iOS 4.0 以降でシェイクイベントを使用するにはどうすればよいですか? このソリューションをテストしましたが、4.1 では機能しません。何かが変わった可能性がありますか、それとも私が何か間違ったことをしていますか? motionBegan: 動作していません

4

1 に答える 1

2

このSOの質問から、誰かがiPhoneを振ったことをどのように検出しますか? 主なトリックは、振動イベント メッセージを受信するために firstResponder として必要な UIView (ビュー コントローラーではない) が必要なことです。シェイク イベントを取得するために任意の UIView で使用できるコードは次のとおりです。

@implementation ShakingView

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if ( event.subtype == UIEventSubtypeMotionShake )
    {
        // Put in code here to handle shake
    }

    if ( [super respondsToSelector:@selector(motionEnded:withEvent:)] )
        [super motionEnded:motion withEvent:event];
}

- (BOOL)canBecomeFirstResponder
{ return YES; }

@end

これらのメソッドのみを使用してビューをサブクラス化するだけで、任意の UIView (システム ビューも含む) をシェイク イベントを取得できるビューに簡単に変換できます (次に、IB のベース タイプの代わりにこの新しいタイプを選択するか、見る)。

ビュー コントローラーで、このビューをファーストレスポンダーに設定します。

- (void) viewWillAppear:(BOOL)animated
{
    [shakeView becomeFirstResponder];
    [super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
    [shakeView resignFirstResponder];
    [super viewWillDisappear:animated];
}

ユーザー アクション (検索バーやテキスト入力フィールドなど) からファーストレスポンダーになる他のビューがある場合は、他のビューが辞任したときに揺れるビューのファーストレスポンダー ステータスも復元する必要があることを忘れないでください。

このメソッドは、applicationSupportsShakeToEdit を NO に設定した場合でも機能します。

于 2011-04-07T08:23:10.703 に答える