2011-11-09 14 views
1

私は揺れイベントをしようとしています。 私は試しました: 1)How do I detect when someone shakes an iPhone?(ケンドールとエランの投稿) 2)motionBegan: Not Working しかしnothigが役立ちます。 私のビューは最初のレスポンダーになりますが、motionBegan/motionEndedは決して呼び出されません。 いくつかのadditiol設定が必要ですか、またはsomethigがありませんか?私のiOS SDKは4.3です。モーションコールバックは一度も呼び出されません

私はUIViewのクラスがあります。ビューの私のViewControllerのXIBクラスで

#import "ShakeView.h" 

    @implementation ShakeView 
    - (BOOL)canBecomeFirstResponder { 
     return YES; 
    } 
    - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { 
     NSLog (@"123"); 
     if (event.subtype == UIEventSubtypeMotionShake) { 
      NSLog(@"Shake!"); 
     } 

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

はShakeViewです。

- (void) viewDidAppear:(BOOL)animated 
{ 
    [self.view becomeFirstResponder]; 
    [super viewWillAppear:animated]; 
    NSLog(@"%d", [self.view isFirstResponder]); 
} 
- (void) viewWillDisappear:(BOOL)animated 
{ 
    [self.view resignFirstResponder]; 
    [super viewWillDisappear:animated]; 
} 

それが記録されます "1"、それはファーストレスポンダIS:私のViewControllerで

Wheel *secondViewController = [[Wheel alloc] initWithNibName:@"Wheel" bundle:nil]; 
    [self.navigationController pushViewController:secondViewController animated:YES]; 
    [secondViewController release]; 

を: 私のViewControllerを押します。しかし、それは何も記録しない。

私はコードのこの数行で半日を過ごすため、私はもうアイデアはありません。誰もそれを解決する方法を知っていますか?おかげさまで

答えて

1

これはSentineLを手助けするには余りにも遅いですが、私は同じ問題を抱えていました。アプリケーションデリゲートのdidFinishLaunchingに重要な行を除いて、関連するすべてのコードがあることは明らかです:

[self.window makeKeyAndVisible]; 

この行がなくても、他のものはすべて正常に動作するため、デバッグは非常に難しいです。あなたのジェスチャーは機能し、コントロールが応答しますが、(SentineLがチェックしたように)最初のレスポンダーを表示することができますが、サブクラス化されたウィンドウまたはビューまたはビューコントローラーはモーションイベントを受け取ることはありません。

これは私には意味がありません。なぜmakeKeyAndVisibleは加速度計に影響を及ぼしますが、ジェスチャーには影響しませんか?うまくいけば、経験豊かなユーザーがそれに答えることができればと思います

P.S.このコードを例として使用する場合は、super respondsToSelectorという条件を省略することをお勧めします。 もちろん、セレクタに応答します。あなたはそれを上書きしています。

関連する問題