【问题标题】:iOS app shows last shown view instead of splash screen- but only sometimesiOS 应用程序显示最后显示的视图而不是启动屏幕 - 但仅有时
【发布时间】:2012-03-04 05:07:26
【问题描述】:

有时当我打开我的应用程序时(无论是在它休眠一段时间后恢复它,还是在它“退出”后打开它时),启动屏幕,基本上只是说“正在加载”,不会显示.该应用程序显示似乎是应用程序退出之前最后显示的视图,而不是加载屏幕。这很糟糕,因为它使应用程序似乎已加载,而实际上它没有加载,并且即使它只是加载,它似乎也没有响应。有没有人经历过这样的事情?

编辑:我熟悉 iOS 的行为,它在暂停时拍照并将其用作恢复图片。然而,当应用程序退出(按下主页按钮,然后按两次主页按钮,点击并按住应用程序图标,然后点击红色破折号并退出它)并重新启动时,它不会使用启动画面屏幕在下次启动时仍然使用上次显示的视图。我可以强制应用始终使用启动画面吗?

【问题讨论】:

    标签: objective-c ios splash-screen


    【解决方案1】:

    问题的原因是我在 applicationWillTerminate: 上执行了一个长时间的操作,这将应用程序的“真正”终止延迟了一小段时间(我假设)。因此,当我在关闭应用程序后立即重新打开应用程序时,此操作(将数据写入磁盘)仍在进行中,因此应用程序并没有真正退出。这就是我认为可以推断出的问题。

    【讨论】:

      【解决方案2】:

      您确定该应用确实正在启动而不是被暂停吗?您描述的行为听起来与已暂停并写入辅助存储的应用完全一样。

      【讨论】:

        【解决方案3】:

        是的,这是按预期工作的。每次您的应用程序进入暂停状态时,iOS 都会截取屏幕截图并将其用作下次启动时的启动图像,除非它是全新启动。所以“或者在它'退出'后打开它”似乎不正确。如果确实发生了这种情况,则意味着您的应用没有在您认为退出的情况下退出。

        无论如何,无论应用是从头启动还是从后台启动,您都应该始终尽快显示您的视图,给用户某种正在加载的通知,然后异步处理加载内容,而不是让用户等待无响应的应用程序,希望它很快就会工作。

        【讨论】:

          【解决方案4】:

          就像 Caleb 所说,您的应用程序正在暂停,但并未真正退出。要在暂停时强制您的应用退出,请在 ProductName-Info.plist 中将 UIApplicationExitsOnSuspend 设置为 YES

          【讨论】:

          • 我不能这样做,因为我的应用依赖于后台功能
          • -0.5 因为UIApplicationExitsOnSuspend 永远不是解决方案。
          【解决方案5】:

          当应用程序进入后台时,设备操作系统会创建快照屏幕图像,这是您可以在应用程序“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];
          }
          

          这里我们创建启动画面的快照.. 只是在窗口中添加启动画面。当应用程序进入后台时

          并在应用程序进入前台时删除快照

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-20
            • 1970-01-01
            • 2014-10-12
            相关资源
            最近更新 更多