3

iOS 控制中心打开时如何通知我?

UIApplicationWillResignActiveNotification 不够好,因为在打开通知中心、出现警报视图和其他可能的情况时也会发送此通知。

我确信这是不可能的,但是当用户在游戏过程中打开控制中心时,QuizUp 应用程序会收到通知,以防止在游戏中作弊。

谢谢

4

3 回答 3

1

嘿,我做了很多试验和错误调查,并提出了一个非常可靠的解决方案。它适用于所有方向,无论是全屏(无状态栏)还是常规模式。AAWindow 是 UIWindow 的子类,你可以在GitHub 上找到它。

我实现这一点的方法是sendEvent在 UIWindow 中进行覆盖,将 TouchEvents 从其他事件中分离出来,并检查屏幕底部 10% 是否发生触摸(这是可以打开控制中心的部分)。如果在applicationWillResignActive0.5 秒(有状态栏)或 3 秒(没有状态栏)的时间跨度内有触摸并被调用,您可以非常确定这是因为控制中心被打开了。然后一个 NSNotification 被触发,你可以在应用程序的任何地方对它做出反应。

于 2015-03-24T19:44:07.627 回答
0

我测试了一种UIPanGestureRecognizer方法(状态栏可见和不可见——如果出现小拉标签而不是控制中心,则会发生变化),同时观察applicationWillResignActive通知,但我无法可靠地知道控制中心是否已打开。如果平移速度足够慢,手势识别器将首先触发,但向上滑动足够快以触发控制中心并完全绕过手势识别器触发肯定很容易。

尝试检查应用程序是否从applicationWillResignActive然后到applicationDidBecomeActive将是了解应用程序是否进入和退出几个状态之一(控制中心、通知中心、接听电话等)的一种非常可靠的方法,但要区分两者之间的区别说通知和控制中心是不可能的。

TL;DR:我认为没有可靠或准确的方法来判断控制中心是否已打开,但 QuizUp 可能正在做一些有趣的事情来伪造它,我愿意犯错!

于 2015-03-01T03:44:30.323 回答
-1

打开控制中心时,循环未完成。意味着只有方法 applicationDidResignActivity会被调用,但applicationDidEnterBackground不会被调用。当应用程序最小化时,两种方法都会被调用。在这里你可以区分。

于 2015-12-09T13:10:05.510 回答