Я хочу показать экран заставки, когда приложение останется в фоновом режиме более 3 минут. Я запустил фоновый таймер, чтобы вызвать функцию, которая будет обрабатывать обновление пользовательского интерфейса.Обновление пользовательского интерфейса из фонового потока, когда приложение также находится в фоновом режиме, чтобы отображать экран заставки при следующем возобновлении
- (void)applicationDidEnterBackground:(UIApplication *)
if (application.applicationState == UIApplicationStateBackground) {
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
splashTimer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerFired) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:splashTimer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
});
}
}
Теперь, когда таймер вызывается я вызвать функцию, чтобы обновить пользовательский интерфейс т.е. добавления изображения в окне так, чтобы она выглядела, как, что это Splash Screen.
- (void)timerFired
{
[splashTimer invalidate];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
UIImageView *splash = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Splash_Screen.png"]];
splash.frame = self.window.bounds;
[self.window addSubview:splash];
}];
}
, а затем удалить этот файл из окна, когда Application Введите передний план снова
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if ([[self.window subviews] count] > 1) {
[NSThread sleepForTimeInterval:1.0];
[[[self.window subviews] lastObject] removeFromSuperview];
}
}
но мой Splash Screen не отображается, когда я называю его из фонового потока. Я пробовал все, но не повезло. Моя проблема в том, что My Timer вызывается из фонового потока, и если я хочу добавить изображение из этого потока, пользовательский интерфейс не обновляется. Любая помощь?