【发布时间】:2014-04-25 13:49:25
【问题描述】:
我创建了第二个启动画面,它会在延迟后淡出。
我的实现应该可以正常工作,但似乎我在操作系统中发现了一个缺陷。打开应用程序:
- 我按下主页按钮
- 等待超过一秒
- 再次打开应用程序
然后它将适当地显示我的自定义启动画面。但是,如果我:
- 按下主页按钮
- 立即打开应用程序
然后它显示主视图,大约 0.5 秒后,初始屏幕出现在屏幕上,并且几乎立即消失 - 这是一种不受欢迎的效果。
因此,如果我足够快地返回应用程序,那么它似乎仍然卡在 applicationWillResignActive 中,然后当应用程序重新出现时移动到 applicationWillEnterForeground。
代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NJALoginViewController *loginViewController = [[NJALoginViewController alloc] init];
self.splashView = [[NJASplashView alloc] initWithFrame:self.window.frame];
self.window.rootViewController = loginViewController;
[self.window makeKeyAndVisible];
[self.window addSubview:self.splashView];
[self performSelector:@selector(removeSplashScreen) withObject:nil afterDelay:0.5];
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.splashView setAlpha:1];
[self.window addSubview:self.splashView];
[self.window bringSubviewToFront:self.splashView];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[UIView animateWithDuration:.5 delay:.7 options:UIViewAnimationOptionCurveLinear animations:^{
[self.splashView setAlpha:0];
} completion:^(BOOL finished) {
if (finished) {
[self.splashView removeFromSuperview];
}
}];
}
- (void)removeSplashScreen
{
[UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^{
[self.splashView setAlpha:0];
} completion:^(BOOL finished) {
if (finished) {
[self.splashView removeFromSuperview];
}
}];
}
有什么想法可以解决这个问题吗?
【问题讨论】:
-
您不应该为启动画面使用视图控制器而不是自己操作视图层次结构吗?
-
不管怎样。延迟仍然存在。
标签: ios objective-c ios7 delay splash-screen