Quiero bloquear a los usuarios de mi aplicación después de un período de tiempo en segundo plano. Estoy detectando esto en el AppDelegate's applicationWillEnterForeground
(y comparando con el tiempo almacenado en applicationWillResignActive
). Si es menor que el período de tiempo de espera, no se lleva a cabo ninguna acción. Si hay más tiempo que el tiempo de espera, llamo a:Alter view before applicationWillEnterForeground
[_navigationController popToRootViewControllerAnimated:NO];
que devuelve al usuario a la vista raíz.
Funciona perfectamente bien con una interrupción visual. La vista anterior (la que el usuario estaba viendo cuando la aplicación quedó inactiva) aparece muy brevemente antes de hacer clic en la raíz. En las pruebas, parece que la vista reaparece antes de llamar al applicationWillEnterForeground
.
La única idea que he tenido es ocultar todo antes de pasar a inactivo, como oscurecer la vista con un rectángulo lleno. Esto huele como un sucio truco para mí, así que estoy pensando que hay una mejor manera.
También estoy abierto a diferentes formas de alcanzar el mismo resultado final. ¡Gracias!
¿A dónde llamas exactamente desde el método popToRootViewController? – TheBlack
@TheBlack: estoy llamando '[_navigationController popToRootViewControllerAnimated: NO]' en el método 'applicationWillEnterForeground' de Application Delegate. –
Si abrió los controladores de vista en applicationWillResignActive, su problema se resolvería, pero eso no encaja en su concepto. De todos modos, mostrar VCs en applicationWillResignActive es el lugar correcto para hacerlo. Mi solución fue mostrar siempre VC y restaurarlos si el usuario volvía a la aplicación en algún intervalo. – TheBlack