【发布时间】:2015-12-10 02:11:17
【问题描述】:
如何在 iOS 控制中心打开时收到通知?
UIApplicationWillResignActiveNotification 不够好,因为在打开通知中心、出现警报视图和其他可能的情况时也会发送此通知。
我确信这是不可能的,但是当用户在游戏过程中打开控制中心时,QuizUp 应用会收到通知,以防止在游戏中作弊。
谢谢
【问题讨论】:
标签: ios objective-c control-center
如何在 iOS 控制中心打开时收到通知?
UIApplicationWillResignActiveNotification 不够好,因为在打开通知中心、出现警报视图和其他可能的情况时也会发送此通知。
我确信这是不可能的,但是当用户在游戏过程中打开控制中心时,QuizUp 应用会收到通知,以防止在游戏中作弊。
谢谢
【问题讨论】:
标签: ios objective-c control-center
嘿,我做了很多试错调查,并提出了一个非常可靠的解决方案。它适用于所有方向,全屏(无状态栏)和常规模式。 AAWindow 是 UIWindow 的子类,您可以在 GitHub 上找到它。
我实现这一点的方法是在 UIWindow 中重写 sendEvent,将 TouchEvents 从其他事件中分离出来,并检查屏幕底部 10% 是否发生触摸(这是可以打开控制中心的部分)。如果有触摸并且在 0.5 秒(有状态栏)或 3 秒(没有状态栏)的时间跨度内调用了 applicationWillResignActive,您可以非常确定这是因为控制中心被打开了。然后一个 NSNotification 被触发,你可以在应用程序的任何地方对它做出反应。
【讨论】:
我测试了UIPanGestureRecognizer 方法(状态栏可见和不可见 - 如果出现小拉标签而不是控制中心,则更改)同时观察applicationWillResignActive 通知,但我无法可靠地知道是否控制中心开通。如果平移速度足够慢,手势识别器会首先触发,但向上滑动足够快以触发控制中心并完全绕过手势识别器触发肯定很容易。
尝试检查应用程序是否从 applicationWillResignActive 转到 applicationDidBecomeActive 将是了解应用程序是否进入和退出几个状态之一(控制中心、通知中心、接听电话)的一种非常可靠的方法, 等等), 但是用这种方式来区分通知和控制中心是不可能的。
TL;DR:我认为没有可靠或准确的方法来判断控制中心是否已打开,但 QuizUp 可能正在做一些有趣的事情来伪造它,我愿意错了!
【讨论】:
当控制中心打开时,循环没有完成。仅表示方法
applicationDidResignActivity 将被调用,但 applicationDidEnterBackground 不会被调用。当应用程序最小化时,两种方法都会被调用。在这里你可以区分。
【讨论】: