Приложение iOS показывает последний показанный вид вместо заставки - но только иногда - PullRequest
3 голосов
/ 04 марта 2012

Иногда, когда я открываю свое приложение (либо возобновляя его после того, как оно какое-то время находилось в спящем состоянии, либо открывая его после того, как оно было «закрыто»), на экране-заставке, который в основном говорит «загрузка», не отображается,Приложение отображает то, что кажется последним отображаемым видом до его закрытия, вместо экрана загрузки.Это плохо, потому что создается впечатление, что приложение загружено, когда оно не загружено, и кажется, что оно не отвечает, даже если оно просто загружается.Кто-нибудь сталкивался с чем-то подобным раньше?

Редактировать: Я знаком с поведением iOS, которое делает снимок на паузе и использует его как изображение возобновления.Тем не менее, когда приложение было выйти (нажмите кнопку «Домой», затем дважды нажмите кнопку «Домой», нажмите и удерживайте значок приложения, затем нажмите красную черту и выйдите из него) и перезапустилось, оно не использует заставкупри следующем запуске и по-прежнему использует этот последний показанный вид.Могу ли я заставить приложение всегда использовать заставку?

Ответы [ 5 ]

4 голосов
/ 28 июня 2012

Причиной проблемы было то, что я выполнял длительную операцию над applicationWillTerminate:, которая задерживала «истинное» завершение приложения на короткий бит (я полагаю). Поэтому, когда я снова открываю приложение сразу после его закрытия, эта операция (запись данных на диск) все еще продолжается, поэтому приложение действительно не было закрыто. Это то, что я считаю, является вопросом, из которого я могу сделать вывод.

3 голосов
/ 04 марта 2012

Вы уверены, что приложение действительно запускается, а не просто приостанавливается?Поведение, которое вы описываете, похоже на поведение приложения, которое было приостановлено и записано во вторичное хранилище.

1 голос
/ 04 марта 2012

Да, это работает, как задумано.Каждый раз, когда ваше приложение переходит в приостановленное состояние, iOS делает снимок экрана и использует его в качестве стартового изображения при следующем запуске, кроме случаев, когда это новый запуск.Таким образом, "или при открытии после того, как он был 'завершен'" не кажется правильным.Если это действительно происходит, это означает, что ваше приложение было не закрыто, когда вы думаете, что это так.как можно скорее, представьте пользователю какое-либо уведомление о его загрузке, затем выполните асинхронную обработку загрузки контента, чтобы пользователь не ждал не отвечающего приложения, надеясь, что оно скоро заработает.

0 голосов
/ 26 июня 2014

Устройство создает снимок экрана, когда приложение работает в фоновом режиме. Вот путь, который вы можете найти в песочнице приложения "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 голосов
/ 04 марта 2012

Как говорит Калеб, ваше приложение приостановлено, но на самом деле не закрывается.Чтобы принудительно завершить работу приложения, когда оно приостановлено, установите UIApplicationExitsOnSuspend в YES в вашем ProductName-Info.plist.

...