2016-01-27 14 views
5

Quando si avvia un'applicazione, lo LaunchScreen.xib viene rimosso non appena tutte le risorse vengono inizializzate.iOS: come ritardare la schermata di avvio?

Voglio rendere la schermata di avvio rimanere per almeno 1 sec.

C'è un modo per raggiungere questo obiettivo?

Grazie!

+1

Rethink questo. Gli utenti vogliono usare la tua app, non fissare la schermata di avvio. – rmaddy

+0

Vorrei solo "raccomandare" (con riserve) questo approccio per i giochi e altri contenuti di intrattenimento che necessitano di visualizzare una schermata iniziale di crediti/licenze. Altrimenti, fai in modo che la tua app sia avviata il più velocemente possibile. –

risposta

13

È possibile creare un controller di visualizzazione che utilizza lo storyboard LaunchScreen, presentarlo (non animato) su applicationDidFinishLaunching o applicationWillFinishLaunching e chiuderlo quando lo si desidera.

Ricorda che questo è scoraggiato da Apple perché dà l'impressione che la tua app impieghi molto più tempo per avviarsi, il che è una cattiva esperienza utente e potrebbe far sì che alcuni utenti eliminino la tua app.

+1

Sto accettando questa risposta anche se non esattamente quello che volevo, perché non so per quanto tempo è stata presentata la schermata di lancio. Speravo che Apple consentisse la configurazione di un tempo minimo, perché gli utenti non sono contenti di vedere qualcosa per 200 millisecondi e averlo fatto prima che capissero cosa fosse ... – ishahak

+0

Questo perché la schermata di avvio non è progettata per mostrare alcun contenuto, Apple suggerisce in realtà il contrario, perché la schermata di avvio sia la vista principale dell'applicazione senza contenuto. Se vuoi un posto in cui mostrare i tuoi loghi, potresti creare una fantastica schermata "Informazioni". Ecco l'HIG di Apple sugli schermi di lancio. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LaunchImages.html – EmilioPelaez

0

Se si vuole andare con semplice, è possibile utilizzare NSThread:

[NSThread sleepForTimeInterval:(NSTimeInterval)]; 

È possibile inserire questo codice nella prima riga del applicationDidFinishLaunching metodo.

Ad esempio, display default.png per 1,0 secondi.

- (void) applicationDidFinishLaunching:(UIApplication*)application 
{ 
    [NSThread sleepForTimeInterval:1.0]; 
} 

Arresta la schermata iniziale per 1,0 secondi.

+4

** Never ** sleep sul thread principale. In questo modo, in realtà, iOS potrebbe uccidere la tua app richiedendo troppo tempo per essere avviata. – rmaddy

+0

È per un secondo, non ha effetto sul thread. – iBhavin

+0

È ancora sbagliato. Quel tempo dovrebbe essere usato per far funzionare l'app, non solo stare lì senza fare niente. – rmaddy

2

Pensavo che il mio pensiero su questo, volevo scrivere nei commenti ma non consentirà molte righe. Credo che molti sviluppatori di applicazioni vogliano fare questo (ritardare la schermata di avvio) perché vogliono creare una presenza di marca delle app/giochi per la loro azienda.

Detto ciò, lo schermo di avvio NON è progettato per questo, come ha spiegato Rick Maddy nella sezione commenti in una delle altre risposte. Lo scopo della schermata di avvio è far sentire agli utenti che l'app viene immediatamente visualizzata mostrando l'interfaccia utente vuota mentre i dati effettivi vengono caricati sul retro (apparirà e così via).

Quindi, per raggiungere ciò che molti sviluppatori vogliono, pur essendo in linea con HIG di Apple, che cosa si può fare è:

  1. display modello interfaccia utente nella launchscreen come previsto da Apple HIG.
  2. Al caricamento della schermata principale, caricare un altro VC che mostri "intro" del marchio. Assicurati che questo funzioni solo una volta (un semplice flag in NSUserDefaults dovrebbe fare il trucco).
  3. Gli utenti dovrebbero essere autorizzati a saltare questo se è un lungo "intro".

La stessa "intro" VC dovrebbe essere disponibile per l'utente toccando un pulsante "View Intro" da qualche parte (forse in circa page).

-1

Per Tenere la schermata è possibile inviare il filo in modalità di sospensione per un certo intervallo di tempo, ma che il tempo non ogni azione possibile eseguire

- (void) applicationDidFinishLaunching:(UIApplication*)application{[NSThread sleepForTimeInterval:5.0];} 
+0

come già detto, non dormi mai sul thread principale, questa non è la risposta – tommybananas

1

Mai sonno sul thread principale.In questo modo potrebbe effettivamente causare iOS per uccidere la vostra applicazione per troppo tempo per avviare

2

Swift 4 Update

Basta scrivere una riga di codice Thread.sleep(forTimeInterval: 3.0) nel metodo di didfinishLauching.... in appdelegate classe.

Esempio

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    Thread.sleep(forTimeInterval: 3.0) 
    // Override point for customization after application launch. 
    return true 
} 
Problemi correlati