Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Iphone iOS idleTimerDisabled行为_Iphone_Ios_Timer - Fatal编程技术网

Iphone iOS idleTimerDisabled行为

Iphone iOS idleTimerDisabled行为,iphone,ios,timer,Iphone,Ios,Timer,我的iPhone应用程序有两种状态:UI和游戏。 游戏仅使用设备倾斜进行,因此我在游戏开始时关闭了自动睡眠: [[UIApplication sharedApplication].idleTimerDisabled = TRUE; 但一旦我回到UI,我希望自动睡眠再次激活。所以在游戏结束后,我会恢复它: [[UIApplication sharedApplication].idleTimerDisabled = FALSE; 经过长时间的游戏后,我在游戏后看到的第一个UI屏幕立即变暗。 所以

我的iPhone应用程序有两种状态:UI和游戏。 游戏仅使用设备倾斜进行,因此我在游戏开始时关闭了自动睡眠:

[[UIApplication sharedApplication].idleTimerDisabled = TRUE;
但一旦我回到UI,我希望自动睡眠再次激活。所以在游戏结束后,我会恢复它:

[[UIApplication sharedApplication].idleTimerDisabled = FALSE;
经过长时间的游戏后,我在游戏后看到的第一个UI屏幕立即变暗。 所以,当空闲计时器被禁用时,它似乎仍然在计算时间。它在“启用”后立即开火。如何解决此问题?

这可能有用

我在使用音乐/音频播放器时也遇到了问题,这似乎重新激活了计时器


ps:在ObjectiveC中,您应该使用YES/NO而不是FALSE/TRUE

我不知道是否可以通过编程方式重置
idleTimer
,但一个选项是要求用户在返回屏幕之前触摸屏幕


另一个选项是在返回后设置自己的超时,并等待超时完成,然后再设置
idleTimerDisabled=NO
。如果您再次开始游戏,请记住清除此超时。

我看不出我的问题与您提到的答案之间有直接关系。据我所知,他们在启动禁用计时器时遇到问题。他们的解决方案是把它设为“否”,然后立即设为“是”。我的情况是,计时器正常启动和停用,但它“记住”其停用时间的长度,一旦启动,立即启动。难道没有办法通过编程“触摸”设备从而重置计时器吗?我想这个技巧解决了我的空闲计时器问题,我将其设置为UISwitch的值(例如0/1)。第二个选项正是我已经使用的。我想知道是否有更少的“黑客”方法来修正这个问题。猜测系统空闲超时值不是很好,但除此之外,这是一个非常好的“黑客”。你可以尝试一个程序化的触摸事件,但即使它起作用,它也不会少一些“骇客”。@Gil也许我不理解这一点。如果任意延迟设置idleTimerDisabled=NO call help,OP会看到什么“竞争条件”?例如,如果iOS计时器设置为30秒,当前为25秒,那么应用程序返回后将强制延迟5秒。因为你不知道iOS内部空闲计时器的状态,所以这不会导致同样的问题吗?@stonedauwg没有竞争条件。我的建议是将设置
idleTimerDisabled
延迟足够长的时间,以便用户有机会与UI交互。我可能会延迟30秒,这是可配置的最低自动锁定延迟。@Gil我明白了。是的,我想我还是喜欢这种方法。谢谢