将摇动手势事件传递给应用代表

时间:2012-05-13 18:55:42

标签: ios events motion-detection uiresponder

我在我的视图控制器中放置了motionBegan:withEvent:方法来查看它是否可行,但它没有被调用。在viewWillAppear中,我将视图控制器设置为第一个响应者,并从canBecomeFirstResponder返回YES。

此视图控制器位于拆分视图的主窗格中,因此可能在我摇动设备之前更改了第一个响应者。

但我真正的问题是如何将所有动作事件传递给我的app委托中的处理程序?我是否真的必须拥有所有视图控制器中的motionBegan:withEvent:方法或所有第一响应者的委托?是不是有办法让这样的事件在没有在每个UIResponder中插入代码的情况下流向响应者链?似乎会有,但我还没有指出如何做到这一点。

2 个答案:

答案 0 :(得分:1)

最简单的方法是在-sendEvent:覆盖UIApplication,然后您就可以控制所有事件

您可以使用此课程

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

另一种解决方案是制作类别或展开-viewWillAppear: more info

答案 1 :(得分:0)

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

由于类别将方法添加到对象的每个实例,因此即使是系统创建的窗口也会获取您的motionBegan方法,并做正确的事情。它工作得很漂亮。