2010-08-20 90 views
2

我想我已经做了所有我应该检测到一个动摇,但motionEnded:withEvent:永远不会被调用。 (一起皱纹的是,我没有UIViewController - 我的应用程序是基于“OpenGL ES的应用程序”模板。)motionEnded没有被调用(没有视图控制器)

我添加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

更新到最新版本的SDK魔术般修复了这个问题。 [Shrug]

0

不能成为第一个响应之前,你的看法是视图层次结构。

+0

我打过电话是别的地方太多,但它似乎并没有帮助 - 就像在'drawView'。 – Grumdrig 2010-08-21 20:28:20

+0

你可以创建一个视图控制器来粘贴EAGLView,并在viewDidAppear中调用becomeFirstResponder:? – 2010-08-23 01:56:29

+0

我很想尽量避免,如果我可以。如果我没有弄错,UIView是'UIResponder's。 – Grumdrig 2010-08-24 18:09:46

1

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]; 
+0

一个更深入的答案将在http://stackoverflow.com/questions/150446/how-do-i-detect-when-someone-shakes-an-iphone通过Joe D'Andrea – LolaRun 2011-06-08 07:45:23

+0

您是否注意到您验证了事件.type'反对'UIEventSubtypeMotionShake'这是一个子类型?巧合的是,这是因为'UIEventSubtypeMotionShake'和'UIEventTypeMotion'具有相同的值。 – bio 2015-12-14 15:02:25

2

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

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

-(BOOL)becomeFirstResponder 
{ 
    return YES; 
} 
+0

这是正确的方法。它为我工作。我遇到了问题,因为我的视图在导航视图控制器中 – Markicevic 2017-05-09 11:31:45

相关问题