2013-06-04 2 views
0

У меня есть таймер в моем приложении, и я хочу, чтобы он работал, пока мое приложение находится на заднем плане. Я бы хотел, чтобы пользователь нажал кнопку «домой», когда показывает таймер, для мгновенного «01:11:11», а затем возвращается к приложению, и он становится видимым для него через 10 минут, чтобы увидеть таймер как «01 : 01: 11 ", однако я получаю долю секунды, когда он показывает последнее состояние, когда приложение перешло на задний план (" 01:11:11 "), прежде чем оно начнет обновление с правильного времени.IOS: принудительное обновление до того, как приложение станет видимым

Я предположил, что могу исправить это, обновив состояние своего таймера в «applicationDidBecomeActive», и он действительно работал на моем симуляторе в Xcode, но не на моем Ipad.

Я использую cocos2d для моего рисунка, и это то, что я делаю в моем applicationDidBecomeActive:

CCScene *s=[director_ runningScene]; 
GameLayer *l=[(GameLayer*)[s getChildByTag:GAME_LAYER_TAG]; 
if (l!=nil) [l myUpdate]; 

Я не думаю, что это отношение к проблеме, хотя, потому что MyUpdate действительно дозвонились, но я до сих пор у меня есть второй сбой на моем Ipad, как будто он возвращается из своего последнего состояния, несмотря ни на что.

+1

Не IOS принять кешировать растровое изображение с последним графическим состоянием приложения перед его использованием, а затем использовать это немедленно при возобновлении? – marko

+1

Да, Марко, ты прав. iOS занимает скриншот приложения, прежде чем он войдет в фоновый режим. Невозможно решить эту проблему. –

ответ

1

В приложении приложения apples clock в приложенииDidEnterBackground скрывает текст таймера, так что, когда приложение выходит на передний план, вы видите пустой пользовательский интерфейс для второй секунды, когда ваше приложение загружает новые данные таймера в пользовательский интерфейс. Кроме того, вы можете вызвать часть вашего кода applicationDidBecomeActive в applicationWillEnterForeground, который вызывается первым. Но имейте в виду, applicationWillEnterForeground - это , а не, вызываемый при первом запуске приложения.

Всегда будет задержка между тем, когда ваше приложение выходит на передний план и когда пользовательский интерфейс обновляется. Theres никак не исправить это, поэтому вы можете использовать то, что Apple использует, чтобы обойти эту проблему.

+0

Я попытался скрыть свой пользовательский интерфейс, но я сделал это в своем приложенииWillResignActive, и поэтому, когда я дважды нажал кнопку «домой», он создал невидимый предварительный просмотр, но делать это в applicationDidEnterBackground, похоже, делает трюк, спасибо. –

+0

Yeah applicationDidEnterBackground вызывается, когда пользователь больше не может видеть ваше приложение. –

+0

Ну, я снова проверил и, по крайней мере, на своем ipad, это не сработало, потому что снятие экрана происходит между applicationWillResignActive и applicationDidEnterBackground, а это означает, что если я скрою свой интерфейс в первом, он закроет предварительный просмотр (дважды щелкните по home button), и если я скрою свой пользовательский интерфейс во втором, это не решит мою оригинальную проблему :( –

0

Ну, я попытался скрыть свой пользовательский интерфейс как в applicationWillResignActive, так и в applicationDidEnterBackground. Поскольку applicationWillResignActive вызывается первым, и перед тем, как перейти в предварительный просмотр (дважды щелкните по HOME), он вызывает «не очень красивый» предварительный просмотр, но я подумал, что, по крайней мере, это решит мою оригинальную проблему. Это не было (нет, на моем IPad). Похоже, что система снимает экран даже до приложенияWillResignActive.

Я проверил таймер в официальном приложении часов, и я вижу часы обновление, даже если приложение работает в фоновом режиме (в режиме предварительного просмотра), так что они «обмануть» в любом случае ...

Смежные вопросы