我想在每次用户返回应用时立即显示自定义视图控制器。目前,我可以使用 didFinishLaunchingWithOptions 轻松完成此操作,只需选择初始rootViewController在屏幕上出现任何内容之前的内容。
但是,如果我将拦截VC放在applicationDidBecomeActive中,那么之前的VC在屏幕上停留半秒,然后才能加载拦截。
如何将应用程序放回到前台时,VC立即在屏幕上显示我的自定义拦截?然后,VC将自行恢复前景视图。
仅供参考:我使用此拦截来验证用户是否在受支持的位置,然后允许该应用返回状态或显示不受支持的屏幕。
答案 0 :(得分:1)
这个问题有两种解决方法。
解决方案:1 您可以在应用程序的委托方法上编写interceptVC - 功能
func applicationWillEnterForeground(application: UIApplication)
而不是写在
func applicationDidBecomeActive(application: UIApplication)
<强>解决方案:2 强> 正如您所做的那样,interceptVC - 在 applicationDidBecomeActive 上的功能也可以在应用程序进入后台时应用,
func applicationDidEnterBackground(application: UIApplication)
这样,可以涵盖 applicationDidBecomActive 延迟。
注意:此处应用程序一旦进入后台,将始终在后台使用interceptVC。
答案 1 :(得分:0)
OP解决方案。
我使用的解决方案是在应用程序重新启动时设置自定义背景图像。这也是多任务选择器中显示的屏幕。当应用程序恢复活动时,它是显示的初始屏幕,直到我的interceptVC加载。我使用的图像与我的interceptVC背景相同,所以它看起来是即时的。这比尝试在活动的辞职时预加载拦截VC更容易。一些淡入淡出动画也用在imageview上,使其更平滑,更刺耳。
- (void)applicationWillResignActive:(UIApplication *)application {
// fill screen with our own imageView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.window.frame];
if(IS_IPHONE_6P){
imageView.image = [UIImage imageNamed:@"splash_1242x2208.png"];
} else if(IS_IPHONE_6){
imageView.image = [UIImage imageNamed:@"splash_750x1334.png"];
} else if(IS_IPHONE_5){
imageView.image = [UIImage imageNamed:@"splash_640x1136.png"];
} else if(IS_IPHONE_4_OR_LESS){
imageView.image = [UIImage imageNamed:@"splash_640x960.png"];
} else {
// should not happen
imageView.image = [UIImage imageNamed:@"splash_750x1334.png"];
}
imageView.tag = 1234;
imageView.alpha = 0;
[self.window addSubview:imageView];
[self.window bringSubviewToFront:imageView];
// fade in the view
[UIView animateWithDuration:0.5 animations:^{
imageView.alpha = 1;
}];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// grab a reference to our imageView
UIView *imageView = [self.window viewWithTag:1234];
// fade away imageView view from main view
[UIView animateWithDuration:0.5 animations:^{
imageView.alpha = 0;
} completion:^(BOOL finished) {
// remove when finished fading
[imageView removeFromSuperview];
}];
}