将摇动手势事件传递给应用程序委托

我把我的视图控制器中的motionBegan:withEvent:方法,看看它是否会工作,但它没有被调用。 在viewWillAppear ,我将视图控制器作为第一个响应者,并从canBecomeFirstResponder返回YES。

这个视图控制器在分割视图的主窗格中,所以也许第一个响应者在我摇晃设备之前被改变了。

但我真正的问题是如何将所有运动事件传递给我的应用程序委托中的处理程序? 我真的必须有motionBegan:withEvent:方法在所有视图控制器或委托给所有第一响应者? 没有办法像这样的事件stream入响应者链而不插入代码到每个UIResponder? 似乎会有,但我没有把手指在如何做到这一点。

最简单的方法是覆盖-sendEvent:UIApplication那么你将有控制所有事件

你可以使用这个类

 int retVal = UIApplicationMain(argc, argv, @"myApplication", @"myAppDelegate"); 

另一个解决scheme是使类别或扩大 – -viewWillAppear: 更多信息

我在传递过程中所做的是创build一个实现了一个motionBegan方法的UIWindow类别。 在那个motionBegan方法中,我广播了一个自定义的NSNotification。 然后,在需要运动事件的应用程序中的任何地方,只需添加一个观察者来进行运动通知。

由于类将方法添加到对象的每个实例,甚至系统创build的窗口得到您的motionBegan方法,并做正确的事情。 它的作品非常漂亮。