Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当控制中心像QuizUp一样打开时,iOS会收到通知_Ios_Objective C_Control Center - Fatal编程技术网

当控制中心像QuizUp一样打开时,iOS会收到通知

当控制中心像QuizUp一样打开时,iOS会收到通知,ios,objective-c,control-center,Ios,Objective C,Control Center,iOS Control Center打开时如何通知我 UIApplicationWillResignActiveNotification不够好,因为在打开通知中心、出现警报视图和其他可能的情况下也会发送此通知 我确信这是不可能的,但是当用户在游戏过程中打开控制中心时,QuizUp应用程序会收到通知,以防止作弊 感谢我测试了一种UIPangestureRecognitizer方法(如果出现的是“小拉动”选项卡而不是“控制中心”,则状态栏会发生可见的变化),同时观察应用程序是否会重新激活通知,我无法

iOS Control Center打开时如何通知我

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

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


感谢

我测试了一种
UIPangestureRecognitizer
方法(如果出现的是“小拉动”选项卡而不是“控制中心”,则状态栏会发生可见的变化),同时观察
应用程序是否会重新激活
通知,我无法可靠地知道控制中心是否已打开。如果平移速度足够慢,手势识别器将首先触发,但肯定很容易快速向上滑动,触发control center并完全绕过手势识别器触发

尝试检查应用程序是否从
applicationWillResignActive
进入
applicationdibecomeactive
将是一种非常可靠的方法,可以知道应用程序是否进入和退出两种状态之一(控制中心、通知中心、接听电话等),但是用这种方式来区分通知中心和控制中心是不可能的


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

嘿,我做了很多尝试和错误调查,并提出了一个非常可靠的解决方案。它可以在所有方向上工作,并且可以在全屏(无状态栏)和常规模式下工作。AAWindow是UIWindow的一个子类,您可以在上找到它


我实现这一点的方法是覆盖UIWindow中的
sendEvent
,将TouchEvents与其他事件分开,并检查触摸是否发生在屏幕底部的10%(这是可以打开Control Center的部分)。如果有触摸,并且在0.5秒(带状态栏)或3秒(不带状态栏)的时间跨度内调用了
applicationWillResignActive
,您可以非常确定这是因为Control Center正在打开。然后会触发NSNotification,您可以在应用程序中的任何位置对此做出反应。

当Control Center打开时,循环未完成。仅表示方法 将调用
ApplicationIDResignActivity
,但不会调用
ApplicationIdentinterBackground
。当应用程序最小化时,将调用这两种方法。在这里你可以区分