2011-12-29 14 views
9

In alcune occasioni, non sempre, quando la mia app presenta un controller di visualizzazione modale che utilizza presentModalViewController:animated: con modalTransitionStyle impostato su UIModalTransitionStyleFlipHorizontal, la schermata iniziale di iPhone è visibile dietro l'animazione. Il più delle volte lo sfondo è nero come previsto. Non c'è nulla di anormale in cui ho creato la window o rootViewController (un UITabBarController). Ho oscurato l'interfaccia utente della mia app ma è possibile vedere il problema nella schermata scattata con un iPhone 4 mentre è in corso la transizione.Cosa causerebbe la visualizzazione della schermata iniziale di iPhone dietro una transizione modal flip?

Cosa potrebbe causare questo? Non so come farlo anche se volessi questo comportamento.

MODIFICA: Questa schermata è stata inviata a me da un tester, non l'ho riprodotta personalmente. Mi hanno detto che si è verificato durante una particolare sessione dell'app e, una volta verificato, è successo per tutte le transizioni. Quando hanno chiuso/rilanciato l'app non è più successo e da allora non l'hanno più visto. Mi chiedo se sia qualcosa di cui mi devo preoccupare (cioè posso impedirlo nel codice).

EDIT 2: Questa applicazione non fa uso di IB. Tutti i controller/viste sono creati nel codice.

enter image description here

+0

Questo è strano che suona un po 'come un insetto. Non è l'ideale se non riesci a riprodurlo. Impostate il colore di sfondo di 'UIWindow' in qualsiasi momento, magari impostando esplicitamente che potrebbe potenzialmente evitare questo, ma questa è pura speculazione. –

+0

Non ho impostato 'backgroundColor' (o qualsiasi altra proprietà di visualizzazione) della finestra.Ho provato a riproporlo impostando esplicitamente il colore dello sfondo della finestra su 'clearColor' (e incasinato con' tabBarController.view' ecc.). Se potessi forzare ciò che potrebbe darmi qualche idea, non ho ancora trovato il modo di farlo. – XJones

+0

Sì, quello era il mio pensiero. Sebbene i nuovi modelli Apple tendano a impostare esplicitamente la finestra 'self.window.backgroundColor = [UIColor whiteColor];' Potrei sbagliarmi, ma è probabile che fosse una situazione simile con xibs pre xcode 4.x –

risposta

3

Ho avuto lo stesso problema prima. Prova a usare [viewController.view setBackgroundColor:[UIColor blackColor]]; sulla vista che stai spingendo. Ha funzionato per me comunque!

+0

grazie, lo sto facendo ora ma forse non l'hai visto nei commenti. Finora non ci sono più repliche. sarebbe bello sapere come farlo esplicitamente in modo diverso da un evento casuale (cioè buggy). – XJones

+0

Sì, mi sembra che sia probabilmente più o meno una cosa casuale che accade. Sono riuscito a farlo solo poche volte consecutive su iPad, felice programmazione! – Chad

+0

Non sono sicuro che questo sia veramente correlato, ma ho apportato questa modifica e per quanto ne so non è mai successo. Non l'ho mai visto personalmente. Accetterò questo per chiuderlo. – XJones

0

Non sono sicuro, ma credo che questo potrebbe essere causato da un bug o di modifica al codice principale 'UIApplication.h', un problema con iOS o un problema con la versione di Xcode voi avere.

Seb

0

Ho visto che questo problema si verificava anche con l'app Facebook per iPhone. Forse è un bug di Apple.

2

Questo accade quando iOS invia avviso di memoria per l'applicazione e framework dell'app discariche automaticamente tutti i componenti vista che non sono visibili, ad eccezione delle strutture di dati relativi al viewController rimarrà, e quando v'è un riferimento al parere, caricherà nuovamente la vista dal pennino (nel tuo caso loadView è chiamato suppongo) dovresti assicurarti che il tuo codice di costruzione della vista sia ricostruibile e annulli tutti gli oggetti relativi ai componenti della vista nel metodo viewDidUnload del tuo controller di visualizzazione.

Puoi anche farlo funzionare eseguendo la tua app tramite simulatore e quando sei in quella modalità modale, attiva la simulazione "Memory Warning" dal menu "Dispositivo" nella parte superiore dello schermo del tuo computer.

+0

Questa non è la causa di questo problema. Hai ragione riguardo a come iOS (precedente a iOS 6) scarica le viste in risposta agli avvisi di memoria, ma questo non è il problema qui. – XJones

0

istruzioni per la risoluzione di questo problema:

  1. andare al XIB effettuato e selezionare il controller View effettuata.
  2. Vai al pannello attributi a destra. Vai a Visualizza >> Colore di sfondo.
  3. Ora impostare il colore che si desidera eseguire la transizione.

Spero che questo aiuti :)

Problemi correlati