Предотвращение моментального снимка вашего приложения при возврате из многозадачности
Проблема заключается в следующем: мое приложение позволяет вам защищать паролем. Я использую интерфейс так же, как пароль, защищающий телефон. Это всегда срабатывало нормально, пока не появилось многозадачность.
Защита паролем по-прежнему работает, но есть одна проблема. Apple делает что-то особенное, чтобы сделать его похожим на то, что наши приложения быстрее загружаются, когда они возвращаются с фона. Os берет изображение нашего экрана перед тем, как пользователь покидает приложение, и он показывает, что пока остальная часть приложения все еще загружается.
Проблема заключается в том, что кто-то, пытающийся перейти в мое приложение, увидит это изображение экрана до того, как будет защищена защита паролем. Конечно, это немного, но я не думаю, что моим пользователям понравится идея людей будучи в состоянии хоть немного заглянуть в свои данные.
Как остановить отображение моментального снимка?
Ответы
Ответ 1
Я решил это. Вот решение:
- (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 - это скриншот моего приложения с пустым экраном (для меня это просто пустой список). Вышеприведенный код ставит перед моим реальным представлением прямо перед тем, как приложение переходит в фоновый режим. Итак, когда вы вернетесь в приложение, это все, что вы видите. Вуаля.
Ответ 2
Отмеченный ответ отлично работает для меня, за исключением того, что когда приложение снова становится активным, splashView остается на экране. Я просто сделал это свойство и добавил [splashView removeFromSuperview] в свой applicationWillEnterForeground, чтобы исправить его. В случае, если кто-то другой получит подобное поведение.
Ответ 3
Вот приведенное выше решение в Swift 3.0:
lazy var splashView: UIImageView = {
let splashView = UIImageView(frame: UIScreen.main.bounds)
splashView.image = UIImage(named: "splash-view")
return splashView
}()
func applicationDidEnterBackground(_ application: UIApplication) {
guard let window = self.window else { fatalError("Window not found") }
window.addSubview(self.splashView)
}
func applicationWillEnterForeground(_ application: UIApplication) {
self.splashView.removeFromSuperview()
}