当我的ios应用程序处于后台模式时,我需要使用UIImageView在外部屏幕上显示更改。
我使用此代码更改UIImageView
campaingTimer = [NSTimer scheduledTimerWithTimeInterval:timeFirstAd target:self selector:@selector(changeImage) userInfo:nil repeats:NO];
这在我的应用处于活动状态时有效,但在后台时,请输入changeImage方法,但不能更改图片。
答案 0 :(得分:0)
NSTimer选择器无法保证在后台启动。除非您注册特定权限,例如在后台播放音乐,以及您在后台实际执行的操作与您要求的权限直接相关,否则您应该假设您无法执行应用程序背景的代码,因为这会让你比试图找到变通方法更能成功。
在这种情况下,似乎您想在经过这么多时间后更改图像。您拥有的NSTimer(假设您的方法编写正确)将在应用程序处于前台时工作,但为了处理背景,我建议您监听appDidEnterBackground和appWillEnterForeground并发布通知(请参阅下面的示例代码)。
AppDelegate.m
================
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.currentTime = [NSDate date];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationNameForBecameActive object:nil userInfo:@{kUserInfoForBecameActive: self.currentTime}];
}
================
ViewController.m
================
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didBecomeActive:) name:kNotificationNameForBecameActive object:nil];
}
- (void)didBecomeActive:(NSNotification *)notification
{
NSDate *sleepDate = notification.userInfo[kUserInfoForBecameActive];
NSTimeInterval secondsPassed = [[NSDate date] timeIntervalSinceDate:sleepDate];
if (secondsPassed >= timeFirstAd)
{
[self changeImage];
}
// reinitialize NSTimer
}
================
或者,您可以发布appDidEnterBackground和appWillEnterForeground的通知并节省时间,同时使NSTimer无效并重新启动它。