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