He confidencial de informaciones en mi aplicación, así que me gustaría ocultar con una pantalla de presentación cuando la aplicación está a punto de ser trasladado a fondo.

Puedo hacer ejecutar la aplicación en iOS6 y más.

Traté de mostrar la vista en applicationWillResignActive pero el problema es que se muestre la pantalla de bienvenida, incluso cuando el usuario desliza el panel de control por ejemplo. Quiero que se muestran sólo cuando la aplicación se mueve a fondo.

Traté aparece mi splashScreen en applicationDidEnterBackground pero toma la captura de pantalla antes de lo que las informaciones que se muestran en la restauración durante la animación.

Aquí el espíritu de lo que quiero :

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [_window addSubview:__splashController.view];
}
  • AFAIK, usted necesita para hacer su acción dentro de applicationWillResignActive y deshacer la misma acción applicationDidBecomeActive de UIApplicationDelegate métodos.
  • El problema es, si se me permite mostrar mi splashscreen en applicationWillResignActive, a continuación, se muestra cada vez que el usuario sólo mirar a su panel de control o doble toque en el botón inicio…
  • Paypal de la aplicación de iOS hace algo similar, que el desenfoque de su última vista activa cuando la aplicación entra en el fondo (para proteger la información del usuario). Les recomendamos el estudio o algunas otras aplicaciones. EDIT: me acabo de dar cuenta que paypal no se aplica cuando el panel de control abrir así que creo que hay alguna manera para lo que usted está tratando de lograr debe ser factible. Va a mantener una vigilancia sobre este hilo.
  • Es un poco lo que quiero hacer (desde mi app también se ocupa de banco de información), pero no estoy seguro de paypal que me deje ver su código): /
  • Supongo que @Ashok solución es, probablemente, el mejor. Cuando un usuario haga doble toque, recibir una llamada, llamada en el panel de control, es renunciar a la aplicación., lo más probable es que no se preocupan por lo que su aplicación está mostrando desde que hace en un «smooth&cool» manera.
  • Pero lo que él está buscando debe ser factible ya que muchas otras financiera (buscar la seguridad) aplicaciones como Paypal, BofA lo hace. (Nota – iPad – centro de control, centro de notificaciones, etc cubrir parcialmente de la aplicación). Creo que la solución no es difícil, pero no hacer clic a mí. Vamos votado esta pregunta para traer a la mente la atención aquí :). También @AncAinu – u debe darle una oportunidad de su solución en el dispositivo real (no sólo simulador), si no lo ha hecho.
  • el método es lo que estoy buscando. El seguro de la aplicación del método por el cual cambiar de aplicaciones en cualquier forma, se oculta la vista principal y se mostrará una pantalla de bienvenida en su lugar.

InformationsquelleAutor AncAinu | 2013-11-05

8 Comentarios

  1. 39

    Creo que el problema es que se están probando en simulador de. En el dispositivo, debería funcionar bien.

    He probado y ha funcionado. Añadir un imageview con la presentación de la imagen cuando la aplicación entra en el fondo –

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
    
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.window.bounds];
    
            imageView.tag = 101;    //Give some decent tagvalue or keep a reference of imageView in self
        //   imageView.backgroundColor = [UIColor redColor];
            [imageView setImage:[UIImage imageNamed:@"Default.png"]];   //assuming Default.png is your splash image's name
    
            [UIApplication.sharedApplication.keyWindow.subviews.lastObject addSubview:imageView];
    }

    Y cuando la aplicación entra de nuevo en primer plano –

    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        UIImageView *imageView = (UIImageView *)[UIApplication.sharedApplication.keyWindow.subviews.lastObject viewWithTag:101];   //search by the same tag value
        [imageView removeFromSuperview];
    
    }

    NOTA – En el simulador (iOS 7.0), el agregado de la subvista no es mostrar al comprobar pulsando el botón de inicio dos veces (Cmd + H), pero en el dispositivo que funciona como se espera (como paypal, BofA apps)

    EDICIÓN: (información Adicional)

    Además a ocultar/sustitución de la información sensible mediante la adición de subvista /desenfoque como se explicó anteriormente, de iOS 7 proporciona la capacidad de ignorar la foto de la pantalla a través de ignoreSnapshotOnNextApplicationLaunch de UIApplication dentro de applicationWillResignActive o applicationDidEnterBackground.

    UIApplication.h

    //Indicate the application should not use the snapshot on next launch, even if there is a valid state restoration archive.
    //This should only be called from methods invoked from State Preservation, else it is ignored.
    - (void)ignoreSnapshotOnNextApplicationLaunch NS_AVAILABLE_IOS(7_0);

    También, allowScreenShot bandera puede ser explorado en Restricciones De Carga.

    • Sí, era el día de mi rayo estaba muerto… la verdad es que funciona muy bien en cierto dispositivo.
    • Esto funciona excepto que si el vídeo estaba jugando. Puedo ocultar lo que el vídeo estaba jugando?
  2. 7

    Swift 3.0 Respuesta para aquellos que son perezosos para traducir.

    func applicationDidEnterBackground(_ application: UIApplication) {
    
        let imageView = UIImageView(frame: self.window!.bounds)
        imageView.tag = 101
        imageView.image = ...
    
        UIApplication.shared.keyWindow?.subviews.last?.addSubview(imageView)
     }
    
    func applicationWillEnterForeground(_ application: UIApplication) {
    
        if let imageView : UIImageView = UIApplication.shared.keyWindow?.subviews.last?.viewWithTag(101) as? UIImageView {
            imageView.removeFromSuperview()
        }
    
    }
  3. 4

    Tenido el mismo problema, básicamente me estaba usando applicationDidEnterBackground para mostrar un UIWindow en la parte superior de los contenidos, pero en iOS8 no funcionó como lo hizo en iOS7.

    La solución que encontré fue la creación de la UIWindow en applicationWillResignActive, pero que quede oculto securityWindow.hidden = YES; y, a continuación, en applicationDidEnterBackground todos los que yo haría sería cambiar securityWindow.hidden = NO.

    Esto parece funcionar exactamente como iOS7 ocultando el contenido cuando multitarea sin afectar a la vista cuando se utiliza NotificationCenter o panel de control.

    • Esto es exactamente lo que yo necesitaba. Probado en iOS7 a través de iOS9.
  4. 3

    No sé por qué, pero ninguno de los métodos descritos aquí trabajó para mí. Yo simplemente estaba tratando de cubrir la pantalla por razones de seguridad. Así, lo que ayudó a que era un Técnico Q&a de la Manzana: https://developer.apple.com/library/ios/qa/qa1838/_index.html

    Supongo que la principal diferencia es el uso de un UIViewController? De todos modos, el siguiente código funciona a la perfección para mí en IOS 9.1:

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {     
        UIViewController *blankViewController = [UIViewController new];
        blankViewController.view.backgroundColor = [UIColor blackColor];
    
        [self.window.rootViewController presentViewController:blankViewController animated:NO completion:NULL];
    }
    
    - (void)applicationWillEnterForeground:(UIApplication *)application
    {
        [self.window.rootViewController dismissViewControllerAnimated:NO completion:NO];
    }
    • Si alertview se muestra, no se oculta, ¿cómo podemos ocultar la alertview en modo de fondo
  5. 1

    Necesidad de escribir el código de la siguiente manera:

    -(void)applicationWillResignActive:(UIApplication *)application
    {
        imageView = [[UIImageView alloc]initWithFrame:[self.window frame]];
        [imageView setImage:[UIImage imageNamed:@"Portrait(768x1024).png"]];
        [self.window addSubview:imageView];
    }

    Aquí para eliminar el imageview:

    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        if(imageView != nil) {
            [imageView removeFromSuperview];
            imageView = nil;
        }
    }

    Está funcionando y debidamente probado.

  6. 0
    @interface MyAppDelegate ()
    @property (strong, nonatomic) MySplashView *splashView;
    @end
    @implementation MyAppDelegate
    - (void)applicationWillResignActive:(UIApplication *)application {
        //hide keyboard and show a splash view
        [self.window endEditing:YES];
        MySplashView *splashView = [[MySplashView alloc] initWithFrame:self.window.bounds];
        [self.window addSubview:splashView];
        self.splashView = splashView;
    }
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        //remove the splash view
        if (self.splashView) {
            [self.splashView removeFromSuperview];
            self.splashView = nil;
        }
    }
    @end
    • ¿qué hacer en caso de que algún sistema de alerta se muestra en la pantalla. en este caso MySplashView se muestra también en la pantalla. puedo evitar esto?
  7. 0

    Esta arreglado para mí, lo siento, este es para Xamarin.Las formas, pero usted debe tener la idea. Usted necesita llamar a UIView.SnapshotView(true) en xamarin o UIView snapshotViewAfterScreenUpdates en iOS. Trabaja en DidEnterBackground en iOS7, y iOS8:

    public override void DidEnterBackground(UIApplication uiApplication)
    {
        App.Current.MainPage = new DefaultPage();
        **UIApplication.SharedApplication.KeyWindow.SnapshotView(true);**
        base.DidEnterBackground(uiApplication);
    }
  8. 0

    Creo que esto va a ayudar para Swift 3.0

    func applicationWillResignActive(_ application: UIApplication) {
    
            let imageView = UIImageView(frame: self.window!.bounds)
            imageView.tag = 101
            imageView.backgroundColor = UIColor.white
            imageView.contentMode = .center
            imageView.image = #image#
            UIApplication.shared.keyWindow?.subviews.last?.addSubview(imageView)
    
        }
    
    func applicationWillEnterForeground(_ application: UIApplication) {
            ReachabilityManager.shared.stopMonitoring()
            if let imageView : UIImageView = UIApplication.shared.keyWindow?.subviews.last?.viewWithTag(101) as? UIImageView {
                imageView.removeFromSuperview()
            }
        }

Dejar respuesta

Please enter your comment!
Please enter your name here