从未调用动作回调

时间:2011-11-09 05:43:17

标签: iphone

我正在尝试做一个震动事件。 我试过了: 1)How do I detect when someone shakes an iPhone?(肯德尔和伊兰的帖子) 2)motionBegan: Not Working 但是没有帮助。 我的视图成为第一响应者,但motionBegan / motionEnded从未调用过。 是否必须完成一些additiol设置,或者我缺少一些东西?我的iOS SDK是4.3。

我有一类UIView:

  #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

在我的ViewController中,View的xib类是ShakeView。 我的ViewController被推了:

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

在我的ViewController中:

- (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”,因此它是第一响应者。但它没有记录任何其他内容。

我在这几行代码上花了半天时间,我没有更多的想法。有谁知道如何解决它? 感谢。

1 个答案:

答案 0 :(得分:1)

这对于帮助SentineL来说已经太晚了,但是我遇到了同样的问题,我喜欢他的问题,因为很明显他已经拥有了所有相关的代码 - 除了一个关键的行,在应用程序委托的{{ 1}}:

didFinishLaunching

这很难调试,因为即使没有这一行,其他一切都会很好。您的手势将起作用,您的控件将响应,您将能够使您的视图成为第一响应者(如SentineL选中) - 但您的子窗口或视图或视图控制器将永远不会收到动作事件。

这对我没有意义。为什么[self.window makeKeyAndVisible]; 会影响加速度计但不会影响手势?希望一些更有经验的用户可以回答这个问题。

P.S。如果您使用此代码作为示例,我建议您省略makeKeyAndVisible条件。 当然它响应选择器;你压倒了它。