【问题标题】:iOS How do I tell when a user is interacting with the app?iOS 如何判断用户何时与应用交互?
【发布时间】:2016-12-16 20:17:23
【问题描述】:

目标: 我需要能够判断用户何时与iPhone 应用程序交互。 5 分钟后,我会自动logout 用户,但如果用户正在与应用交互,我不想这样做。

我读过shouldReceiveTouch:,但是如果用户触摸某物,它就会被调用。我可以在那里登录以重置 5 分钟计时器。

我怎样才能让任何屏幕上的任何view 被触摸,5 分钟计时器重新开始?

是否可以在不到处实现shouldReceiveTouch: 的情况下做到这一点?

感谢任何帮助。

【问题讨论】:

  • 您是否认为应用程序在前台时就像用户正在交互一样?如果是,您可以使用 applicationDidEnterBackground 并计算注销用户的时间

标签: ios uigesturerecognizer


【解决方案1】:

至少有3种方法:

  • (1) 我认为最好的建议是in this post。基本上你会在UIApplication 上覆盖-sendEvent:。但有人提到这可能不再适用于 iOS 7 - YMMV。

  • (2) 另一种不太干净的解决方案是使用method swizzling。您可以为自己的实现替换 UIView 上的方法,例如-touchesEnded:withEvent:-hitTest:withEvent:

  • (3) 如果您的应用不使用任何第 3 方视图控制器,您可以创建 UIViewController 的自定义基类并制作所有视图控制器(登录视图控制器和之前显示的任何内容)都继承自这个基类。此视图控制器将具有手势识别器,或者可能覆盖 -touchesEnded:withEvent:-hitTest:withEvent: 之类的方法。

对于所有方法,您可能会使用单例来跟踪最后触摸的时刻。也许单身人士会使用倒数计时器。单例可以使用a multicast delegate 或使用NSNotificationCenter 通知其他视图控制器计时器已用完。


P.S.:我应该注意,您应该仔细考虑方法混合。如果其他一些项目或库使用相同的方法,您将永远无法确定哪个实现用于 swizzled 方法。

【讨论】:

  • 我不知道为什么有人在没有至少评论哪里错的情况下投反对票!
  • 我的回答没有错。我什至可以创建一个示例项目。我希望人们也能说出他们投反对票的原因。
  • 我已经更新了答案。我认为方法 (1)(3) 是最好的。但是如果您在应用程序中显示 3rd 方视图控制器,(3) 将不起作用,在这种情况下 (2) 可能会更好。自 iOS 7 起,选项 (1) 可能不再有效。
  • 如果您需要选项 (2) 的代码示例,请告诉我,我会在明天添加。
猜你喜欢
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多