我想我已经做了所有我应该检测到的震动,但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。)
答案 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神奇地修复了问题。 [耸肩]