我有一个菜单,如果它在一定时间后无效,我想自动隐藏。此菜单由UIViewControllers层次结构组成,它呈现各种不同的视图。
我正在考虑运行计时器,无论何时触摸都会使计时器失效并重新启动。
是否可以捕获一组UIViews中的所有触摸事件?也许只是保持一个布尔值并使用主UIWindow来捕捉触摸事件?
修改
我的应用程序是各种各样的自助服务终端应用程序,带有主屏幕和菜单。当菜单启动时,我希望它运行自动关闭计时器,在整个菜单屏幕中的任何触摸后重置。菜单以模态显示在整个屏幕上。
答案 0 :(得分:1)
一种可靠的方法是继承UIApplication
并覆盖- (void)sendEvent:(UIEvent *)event
方法,您应用中发生的每个触摸事件都会通过此方法,您可以检查UIEvent
类型以查看是否它是UIEventTypeTouches
并重置计时器。
另一种方法是在整个用户可访问的UI上添加透明图层并覆盖hitTest:withEvent:
。
答案 1 :(得分:0)
你可以在你的模态视图控制器顶部看到一个不可见的视图,并在其上放置一个可以启动计时器的手势识别器,或者
-touchesBegan:withTouches
方法,然后发送到。nextResponder
相同的方法。