【问题标题】:Catch touch events anywhere onscreen in certain views?在某些视图中捕捉屏幕上任何位置的触摸事件?
【发布时间】:2012-02-29 04:25:19
【问题描述】:

我有一个菜单,如果它在一定时间后处于非活动状态,我希望它会自动隐藏。该菜单由 UIViewController 的层次结构组成,呈现各种不同的视图。

我正在考虑运行一个计时器,只要有触摸,它就会失效并重新开始。

是否可以在一组 UIView 中捕获所有触摸事件?也许只是保留一个布尔值并使用主 UIWindow 来捕获触摸事件?

编辑:

我的应用是一种自助服务终端应用,有一个主屏幕和一个菜单。当菜单启动时,我希望它运行一个自动关闭计时器,它会在整个菜单屏幕上的任何触摸后重置。菜单以模态方式显示在整个屏幕上。

【问题讨论】:

  • 所以澄清一下,你只想让菜单记住触摸和重置计时器,还是整个视图?
  • 菜单,模态显示。
  • 嗯...不知道您的推理,这是一个相当阴暗的设计...您不应该允许用户手动关闭任何模态对话吗?但那是无关紧要的。是否可以让观察者连接到菜单中每个 UI 元素的每个方法?也许他们可以在一个颤抖单例中设置一些东西?
  • @CodaFi - 我希望一个人通过密码 UI 管理应用程序。如果管理员走开,它应该会在一段时间后自动关闭。

标签: objective-c ios ipad event-handling uitouch


【解决方案1】:

确定的一种方法是继承UIApplication 并覆盖- (void)sendEvent:(UIEvent *)event 方法,您的应用中发生的每个触摸事件都会通过此方法,您可以检查UIEvent 类型以查看它是否为UIEventTypeTouches 并重置计时器。

另一种方法是在整个用户可​​访问的 UI 上添加一个透明层并覆盖 hitTest:withEvent:

【讨论】:

  • 如何使用我的 UIApplication 子类?
  • +1 to hitTest:withEvent: - 它捕获事件并将其传递给子视图。您应该为根视图编写此方法。
【解决方案2】:

您可以在模态视图控制器顶部有一个不可见的视图,并在其上放置一个可以启动计时器的手势识别器,或者一个

-touchesBegan:withTouches

方法,然后以同样的方法发送到.nextResponder

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 2015-08-12
    • 2010-11-13
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多