motionEnded未被调用(没有视图控制器)

时间:2010-08-20 20:57:46

标签: iphone ipad ios shake motion

我想我已经做了所有我应该检测到的震动,但motionEnded:withEvent:永远不会被召唤。 (一个问题是我没有UIViewController - 我的应用程序基于“OpenGL ES App”模板。)

我已将application.applicationSupportsShakeToEdit = YES;添加到application:didFinishLaunchingWithOptions:

- (BOOL)canBecomeFirstResponder { return YES; }

到EAGLView.m(确实被调用),[self becomeFirstResponder];initWithCoder:(并尝试了其他各种地方)。

但调试器永远不会出现

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 

我错过了一步吗?我必须有一个控制器吗?

(我在iPad模拟器中使用iOS 3.2。)

4 个答案:

答案 0 :(得分:3)

您必须将其添加到您的控制器:

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

-(BOOL)becomeFirstResponder
{
    return YES;
}

答案 1 :(得分:2)

UIResponder链与摇动通知一起使用的方式令人讨厌。似乎UIWindow总是收到通知,然后子响应者可能会或可能不会依赖链中的上面的内容。我创建了一个UIWindow子类,并将其定义为我的窗口类,其中包含以下内容:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{
    if (event.type == UIEventSubtypeMotionShake) 
        [[NSNotificationCenter defaultCenter] postNotificationName:@"UIEventSubtypeMotionShakeEnded" object:nil];
}

然后,对于任何想要摇动通知的视图,我只是让他们将自己添加为UIEventSubtypeMotionShakeEnded事件的观察者,并且他们每次都得到它。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeNotification:)
                                             name:@"UIEventSubtypeMotionShakeEnded" object:nil];

答案 2 :(得分:0)

在视图层次结构中,您无法成为第一个响应者。

答案 3 :(得分:0)

更新到最新版本的SDK神奇地修复了问题。 [耸肩]