2011-11-15 15 views
11


Ho notato qualcosa che accade in ogni app che sviluppo. Di solito non è un problema, ma in questa app specifica sarebbe fantastico se potessi "sistemarlo", se è addirittura un bug.Previene la visualizzazione della schermata iniziale dopo il ritorno dallo sfondo

Procedura per ri-produrre il problema: app

  • Start, splash screen mostra per ca. 3 secondi e l'app inizia.
  • Premere il tasto home, l'app passa allo sfondo.
  • Riportare l'app dallo sfondo (facendo doppio clic sulla schermata iniziale e scegliendolo), mostra lo splash per mezzo secondo circa, quindi l'app torna indietro.

E 'possibile sbarazzarsi di quello splash screen spuntando per mezzo secondo sulla via del ritorno dallo sfondo? È davvero un problema per questa app specifica.

+1

Assicurati che nel plist della tua app sia presente che l'applicazione non viene eseguita in background impostata su NO (chiave non elaborata: ['UIApplicationExitsOnSuspend'] (http://developer.apple.com/library/ios/documentation/general /Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW23)). Alcune app VOGLIONO essere "uccise" quando l'utente le usa, quindi usano questa chiave. Tuttavia, per riprendere la tua app devi permetterne l'esecuzione in background (in pausa davvero, non è necessario lavorare in background). – Sam

+0

In realtà non cambia nulla, anche dopo essere tornati dallo sfondo lo splash appare per una frazione di secondo ... –

+0

Il tuo codice passa attraverso l'applicazione: didFinshLaunchingWithOptions: 'due volte (verifica con breakpoint o NSLog)? Non sono sicuro di come verrà visualizzata la schermata iniziale (default.png) ogni volta che si avvia l'app senza utilizzare la chiave 'UIApplicationExistsOnSuspend' (che uccide l'app quando lo si esegue in background). A meno che ... l'app venga inavvertitamente uccisa all'uscita come SIGABRT in 'applicationDidEnterBackground:' o 'applicationWillResignActive:'. – Sam

risposta

10

Beh, a quanto pare la questione non era molto intelligente per cominciare :) Questo "problema" che accade solo nel simulatore. Quando esegue il debug sul dispositivo stesso, funziona come previsto.

Nessun danno. Grazie a tutti coloro che hanno cercato di aiutare! :)

+1

+1 Non una domanda negativa però.Molte persone potrebbero anche incontrarlo senza sapere cosa sta succedendo fino a quando non scoprono come hai fatto che è un simulatore specifico. Segna questo come risposta. – Sam

+0

non mi lascia ancora, lo farò più tardi :) Grazie Sam! :) –

+0

In realtà, ho questo problema sul mio dispositivo 5.1 solo ora. A volte mostra la schermata iniziale e talvolta non lo fa, ma FInishLaunchingWithOptions non viene attivato di nuovo – Setomidor

0

Il codice per visualizzare la schermata iniziale dovrebbe trovarsi nella appdelegate nel metodo didFinishLaunchingWithOptions. Se lo è, appare solo quando la tua app si avvia effettivamente, non quando ritorna dallo sfondo.

Usa qualcosa come questo (lo so che utilizza il codice di animazione vecchio, ma sono sicuro che si può aggiornare al blocchi se è necessario) ...

splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, 320, 460)]; 
    splashView.image = [UIImage imageNamed:@"Default.png"]; 

    [myWindow addSubview:splashView]; 
    [myWindow bringSubviewToFront:splashView]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)]; 
    splashView.alpha = 0.0; 
    [UIView commitAnimations]; 

e quindi creare un metodo chiamato startupAnimationDone ...

  • (void) startupAnimationDone: (NSString *) animationID finito: (NSNumber *) ha terminato contesto: il contesto (void *) {

    [splashView removeFromSuperview];

    [splashView release]; }

+1

Penso che @Shai Mishali si riferisca al file "Default.png" che viene visualizzato mentre l'app sta arrivando in primo piano. Sfortunatamente non è possibile modificare questo comportamento e se l'immagine viene visualizzata o meno quando la tua app è di nuovo attiva dipenderà da una serie di fattori, ma da quello che posso dire è principalmente la memoria che hai a disposizione in quel momento. – Rog

+1

Ho provato a fare qualcosa del genere, ma il problema è che se non specifichi una schermata iniziale, verrà visualizzata una schermata nera fino a quando l'app non sarà pronta, e solo allora verrà mostrato lo splash. Potrei in qualche modo "annullare" lo splash di default in modo che non ci sarà una schermata nera al momento del lancio? –

+0

quello che puoi fare è prendere una copia dello schermo poco prima che la tua app vada in background in applicationWillResignActive, rinominare default.png in qualcos'altro e rinominare questa immagine presa su default.png - Immagino che questo sia ciò che legge app come fa Kobo quando stanno per andare in sottofondo. Non l'ho fatto da solo, quindi questa è solo un'ipotesi. In genere, immagino che ottenere immediatamente la tua immagine, qualunque essa sia, in applicationDidBecomeActive sarebbe abbastanza istantanea in modo che l'utente non debba vedere uno schermo nero. – amergin

9

Nella mia esperienza, questo è qualcosa gestito da iOS (sto andando con esperienza perché non ho visto alcuna documentazione su questo). Se il sistema operativo è in grado di ripristinare lo stato dell'applicazione in modo semplice e rapido, verrà visualizzato uno screenshot del suo stato precedente mentre tale stato viene ripristinato.

Tuttavia, se qualcosa ritarderà il processo, ad esempio se l'app non si trova ancora nello sfondo correttamente (ad esempio durante la commutazione rapida delle attività) o se qualcos'altro prevedibile ritarderà l'avvio, tornerà alla schermata iniziale (invece dello screenshot), per facilitare l'esperienza dell'utente.

Risposta breve: è fuori dalle tue mani.

+1

Stai rispondendo a una domanda già risposta. Come ho detto, il problema era nel simulatore e non si verificava quando si verificava sul tuo dispositivo. –

+4

Ho aggiunto la risposta perché ho visto che questo si è verificato nei miei progetti sul dispositivo e ho dovuto rispondere alle domande dei clienti a riguardo, quindi ho sentito che un discorso più approfondito era prezioso per i futuri viaggiatori. – QueyJoh

+0

Va bene, mi dispiace per il downvote. Di solito non penso che la sua buona pratica risponda a domande già chiuse, specialmente quando la risposta non è nulla di significativo ("È fuori dalle tue mani"). Apprezzo lo sforzo però. –

12

So che questa domanda è contrassegnata da una "risposta" - ma la realtà è che la risposta non era corretta nel mio caso e voglio condividere.

Inizialmente sono arrivato alla conclusione che la risposta più accurata di cui sopra era QueyJoh - "questo è qualcosa gestito da iOS ... Risposta breve: è fuori dalle tue mani".

Tuttavia dopo aver sperimentato sono riuscito a individuare il problema come voci nel mio file info.plist che controlla la barra di stato. In particolare avevo voci per "UIStatusBarHidden" e "UIStatusBarStyle".

La rimozione di queste voci dal mio file Plist ha interrotto immediatamente la mia app per mostrare la schermata Splash quando si passa dalla mia app e viceversa.

Problema risolto.

Matthew

+0

Grazie. Mi stava facendo impazzire. – pfs

+0

Nel mio caso, quando stavo usando 'LaunchScreen.xib' questo non mi ha aiutato, quando si utilizza' LaunchImage' questo non era richiesto. –

0

ho anche questo problema, ora ho avuto risolvere it.The ragione è che hai fatto troppe cose in applicationDidEnterBackground, cercano di diminuire.