Предотвращение просмотра снимка вашего приложения при возвращении из многозадачности - PullRequest
11 голосов
/ 04 июня 2011

Проблема в том, что мое приложение позволяет вам защитить себя паролем. Я использую такой же интерфейс, как пароль для защиты телефона. Это всегда работало нормально, пока не появилась многозадачность.

Защита паролем все еще работает, но есть одна проблема. Apple делает что-то особенное, чтобы заставить наши приложения загружаться быстрее, когда они возвращаются из фона. ОС делает снимок нашего экрана непосредственно перед тем, как пользователь покидает приложение, и отображает его, пока остальная часть приложения все еще загружается.

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

Как остановить отображение этого снимка?

Ответы [ 3 ]

15 голосов
/ 04 июня 2011

Я решил это.Вот решение:

- (void)applicationDidEnterBackground:(UIApplication *)application{
    if (appHasPasscodeOn){
        UIImageView *splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)];
        splashView.image = [UIImage imageNamed:@"Default.png"];
        [window addSubview:splashView];
        [splashView release];
    }
}

Default.png - это скриншот моего приложения с пустым экраном (для меня это просто пустой список).Приведенный выше код ставит это перед моим реальным представлением прямо перед тем, как приложение переходит в фоновый режим.Итак, когда вы возвращаетесь в приложение, это все, что вы видите.Вуаля.

4 голосов
/ 06 февраля 2013

Отмеченный ответ отлично работает для меня, за исключением того, что, когда приложение снова становится активным, splashView остается на экране.Я просто сделал его свойством и добавил [splashView removeFromSuperview] в приложение applicationWillEnterForeground, чтобы исправить это.На случай, если кто-то другой будет вести себя аналогично.

1 голос
/ 24 января 2017

Вот приведенное выше решение в Swift 3.0:

lazy var splashImageView: UIImageView = {
    let splashImageView = UIImageView(frame: UIScreen.main.bounds)
    splashImageView.image = UIImage(named: "splash-view")
    return splashImageView
}()

func applicationDidEnterBackground(_ application: UIApplication) {
    window?.addSubview(splashImageView)
}

func applicationWillEnterForeground(_ application: UIApplication) {
   splashImageView.removeFromSuperview()
}
...