1

それで、私が実装したコードを示すことから始めましょう

-(BOOL)canBecomeFirstResponder 
{
    return YES;
}

- (void) viewWillAppear:(BOOL)animated 
{
    [super viewWillAppear:animated];
    [self becomeFirstResponder];
}

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}

- (void)viewWillDisappear:(BOOL)animated 
{
    [self resignFirstResponder];
    [super viewWillDisappear:animated];
}

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
    {
        NSLog(@"FUUU");
    }
}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
    if (motion == UIEventSubtypeMotionShake)
    {
        NSLog(@"FUUU");
    }
}

これはすべてUIViewControllerクラスにあります

そして- (void) applicationDidFinishLaunching:(UIApplication*)application私は設定しました

[application setApplicationSupportsShakeToEdit:YES];

それでも、それは何もしません。検出された単一の動きはありません。他に何をすべきかわかりません。これは他の多くの人にとってもうまくいったようですので、なぜ私が違うのか困惑しています...それはUINavigationControllerを介しているからでしょうか?または、plistを介してメインアプリケーションをロードし、メインがそのように見えるため

retVal = UIApplicationMain(argc, argv, nil, nil);

私はかなり完全に困惑しています。

4

3 に答える 3

3

シェイクジェスチャを検出するには、UIViewをサブクラス化し、次のメソッドを実装する必要があります(UIViewControllerにこれらのメソッドを実装しないでください)。

  • (BOOL)canBecomeFirstResponder
  • (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event

次に、サブクラス化されたビューをUIViewControllerに追加し、-becomeFirstResponderを呼び出して最初のレスポンダーにします。

于 2012-09-07T22:49:00.287 に答える
2

[application setApplicationSupportsShakeToEdit:YES];これはデフォルト値であり、iOSはShake to Undo / Redoにのみこれを使用するため、設定する必要はありません。

ビューコントローラでモーションをキャプチャする場合は、このプロパティをNOに設定[application setApplicationSupportsShakeToEdit:NO];し、自分で処理する必要があります。

イベント処理プログラミングガイドで説明されているように。

お役に立てれば。

PS:念のため、viewDidAppearメソッドで間違ったスーパーを呼び出します。これは次のようになります:

- (void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}
于 2012-09-07T09:27:31.983 に答える
0

回答ありがとうございましたが、別の方法を使用することになりました。アプリデリゲートの加速度計にアクセスし、通知センターを介して、表示されている現在のUIナビゲーションコントローラーに通知を送信しました。

- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 
{
    [[NSNotificationCenter defaultCenter] postNotificationName:notificationName object:nil userInfo:nil];

} 
于 2012-09-25T05:44:21.750 に答える