Objective c iOS应用程序显示上次显示的视图,而不是闪屏-但只是有时
有时,当我打开我的应用程序时(在休眠一段时间后恢复应用程序时,或在“退出”后打开应用程序时),基本上只显示“加载”的启动屏幕不会显示。应用程序显示退出应用程序之前的最后一次显示视图,而不是加载屏幕。这是不好的,因为它使应用程序看起来好像已经加载了,而它没有加载,而且它似乎没有响应,即使它只是加载。以前有人经历过类似的事情吗Objective c iOS应用程序显示上次显示的视图,而不是闪屏-但只是有时,objective-c,ios,splash-screen,Objective C,Ios,Splash Screen,有时,当我打开我的应用程序时(在休眠一段时间后恢复应用程序时,或在“退出”后打开应用程序时),基本上只显示“加载”的启动屏幕不会显示。应用程序显示退出应用程序之前的最后一次显示视图,而不是加载屏幕。这是不好的,因为它使应用程序看起来好像已经加载了,而它没有加载,而且它似乎没有响应,即使它只是加载。以前有人经历过类似的事情吗 编辑:我熟悉iOS的行为,它会在暂停时拍照并将其用作简历照片。然而,当应用程序退出(按home按钮,然后按home按钮两次,点击并按住应用程序图标,然后点击红色破折号并退出)
编辑:我熟悉iOS的行为,它会在暂停时拍照并将其用作简历照片。然而,当应用程序退出(按home按钮,然后按home按钮两次,点击并按住应用程序图标,然后点击红色破折号并退出)并重新启动时,它不会在下次启动时使用启动屏幕,仍然使用上次显示的视图。我可以强制应用程序始终使用启动屏幕吗?您确定应用程序确实正在启动而不是暂停吗?您描述的行为听起来与已挂起并写入辅助存储的应用程序完全相同。正如Caleb所说,您的应用程序正在挂起,但并未真正退出。若要在应用程序挂起时强制退出,请在ProductName Info.plist中将
UIApplicationExitsOnSuspend
设置为YES
。YES,该操作正常。每次你的应用程序进入暂停状态时,iOS都会截图,并在下次发布时将其用作发布图像,除非是新发布的。所以“或者在“退出”后打开它”似乎是不对的。如果真的发生了这种情况,那就意味着你的应用程序是而不是在你认为是的时候退出
无论如何,不管应用程序是从零开始启动还是从后台启动,你都应该尽快显示你的视图,给用户一些加载的通知,然后异步处理加载内容,不要让用户等待无响应的应用程序,希望它能很快工作。问题的原因是我在applicationWillTerminate:上执行了长时间的操作,这将应用程序的“真”终止延迟了一小段时间(我假设)。因此,当我在关闭应用程序后立即重新打开应用程序时,此操作(将数据写入磁盘)仍在进行,因此应用程序尚未真正退出。这就是我所能推断的问题所在。当应用程序进入后台时,设备操作系统会创建快照屏幕映像,下面是您可以在应用程序“AppData/Library/Caches/Snapshots/”的沙盒中找到的路径 这里有一个技巧,你们可以防止在启动应用程序时显示应用程序的最后一个屏幕
// Create subclass of UIImageView
@interface SnapShotImageView :UIImageView
@end
@implementation SnapShotImageView :UIImageView
@end
// Create function in appdelegate.m
- (void)createSnapshotWhileApplicationGoesInBackground{
NSString *splashImg = nil;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
splashImg= @"Default~ipad.png";
}
else {
splashImg= @"Default~iphone.png";
}
UIWindow *win = [[UIApplication sharedApplication] keyWindow];
SnapShotImageView *splash = [[SnapShotImageView alloc] initWithImage:[UIImage imageNamed:splashImg]];
splash.frame = self.window.bounds;
[win addSubview:splash];
}
- (void)removeSnapshotFromWindow{
UIWindow *win = [[UIApplication sharedApplication] keyWindow];
if ([[win subviews] count] > 1) {
[NSThread sleepForTimeInterval:0.5];
NSArray *array = [win subviews];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[SnapShotImageView class]]) {
[obj removeFromSuperview];
}
}];
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[self removeSnapshotFromWindow];
}
//Call this function Application delegate method this way..
- (void)applicationDidEnterBackground:(UIApplication *)application {
[self createSnapshotWhileApplicationGoesInBackground];
}
- (void)applicationWillEnterForeground:(UIApplication *)application{
[self removeSnapshotFromWindow];
}
- (void)applicationDidBecomeActive:(UIApplication *)application{
[self removeSnapshotFromWindow];
}
在这里,我们将创建启动屏幕的快照。。只是在窗口中添加闪屏。当应用程序进入后台时
当应用程序出现在前台时删除快照我不能这样做,因为我的应用程序依赖于后台功能-0.5,因为
UIApplicationExitsOnSuspend
从来都不是解决方案。