2012-09-16 14 views
21

sto aggiornando il mio PhoneGap iOS-app per renderlo compatibile con l'iPhone 5.iPhone 5 splashscreen non visualizzare correttamente - PhoneGap

Mi sto nascondendo manualmente la schermata di avvio dopo la mia app è inizializzato.

Quando si simula iPhone 5: All'avvio dell'app visualizza la schermata iniziale corretta ([email protected]) (di seguito "il 5") ma la nasconde rapidamente e visualizza invece la schermata iniziale di iPhone 4 (di seguito " il 4 "). Il 4 non copre l'intera app, mostrando quindi le barre superiore e inferiore dell'inizializzazione dell'app.

Non sono del tutto sicuro di come funzioni ma posso pensare a due possibili scenari: 1) Entrambe le immagini vengono visualizzate contemporaneamente ma per qualche motivo l'auto 5 si nasconde mentre il 4 attende la chiamata dall'app per nascondersi . 2) Ad un certo punto quando si disabilita manualmente la schermata iniziale dello splash screen si passa alla schermata "vera" per uno "falso" che viene visualizzato fino a quando la chiamata javascript dall'app e l'icona del telefono potrebbero non essere visualizzati uno dopo questo switcheroo.

Qualcun altro ha incontrato e/o risolto questo?

AGGIORNAMENTO: Provato a rimuovere e aggiungere nuovamente tutte le immagini di splash, ma inutilmente. Ho provato a rimuovere le immagini più piccole (il 4 e la sua versione non retina) ma anche senza quelle più piccole presenti in qualsiasi parte del progetto ottengo lo stesso errore!

UPDATE 2: Cordova 2.2.0 è stato rilasciato, fissando in tal modo la questione in base a: http://shazronatadobe.wordpress.com/2012/10/27/whats-new-in-cordova-ios-2-2-0/

Quindi, la soluzione consigliata sarebbe quindi di aggiornare la vostra applicazione per utilizzare Cordova 2.2.0, se questo per qualche motivo non è possibile, le soluzioni sono fornite di seguito.

+2

Hai cambiato il 'Launch Images' nel tuo progetto XCode? Hai incollato manualmente le tue immagini splash (in 'your_project'->' Resources'-> 'splash')? – Littm

+0

Sì! Ho provato a rimuovere e leggere tutte le immagini di splash ma senza alcun risultato – Hessius

+0

Credo che questo sia in realtà un bug in Cordova/PhoneGap - sembra ricaricare manualmente l'immagine dello splash screen, e quando non è su un iPad, per default il caricamento dell'immagine "Predefinita" (lo splash classico). Devo essere aggiornato per verificare le dimensioni dello schermo immagino ... – Brion

risposta

19

Ho ricevuto due risposte altrove, ma non ho avuto tempo di provare loro fuori ancora: From user T123 in the Phonegap Google Group: aperto CDVViewController.m - trova - (void) ShowSplashScreen

cambiamento circa la linea: 690

Da:

else // not iPad 

{ 

    orientedLaunchImageFile = launchImageFile; 

} 

A:

else // not iPad 

{ 

    orientedLaunchImageFile = launchImageFile; 

    /* Edited for 4-inch IP5 */ 

    if(screenBounds.size.height == 568) 

     orientedLaunchImageFile = [NSString stringWithFormat:@"%@-568h", launchImageFile]; 

} 

E da Brion che ha commentato in precedenza, la seguente richiesta di pull, hoepfully da incorporare in Cordova 2.2.0: https://github.com/apache/incubator-cordova-ios/pull/50

EDIT: Ho provato la soluzione di T123 e che sta funzionando per me! EDIT2: la correzione di Brion è stata incorporata in Cordova 2.2.0 che ora è stata rilasciata!

Edit3: Solo l'aggiornamento per evidenziare un commento per coloro che non si preoccupano di loro lettura:

Per PhoneGap versione 1.4.1, sono riuscito ad ottenere correzione di Hessius a lavorare in questo modo: ho copiato i metodi ShowSplashScreen, isIPad, resolveImageResource e la definizione #define degreesToRadian (x) (M_PI * (x)/180.0) dal file PGViewController.m al mio file MainViewController.m. Successivamente, XCode si è lamentato che stavo assegnando valori agli attributi di sola lettura, quindi ho modificato il file di intestazione in PhoneGap.framework per rendere questi due attributi readwrite. Ho anche modificato launchImageFile dal codice di Hessius su @ "Default". Questo ha fatto il trucco per me.- Joe Dyndale 8 ottobre 12 alle 15:23

+0

Come si usa in realtà questo? file aggiornato nel tuo progetto PhoneGap in xcode? Sembra che sia un file esterno al progetto stesso. La mia esperienza con l'aggiunta di questo codice e l'esecuzione sul simulatore iPhone5 non ha cambiato nulla. –

+1

Stai usando cordova 2.0? Cordova viene aggiunto come sottoprogetto "CordovaLib.xcodeproj" se espandi questo progetto vedi la cartella "Classi", all'interno di questa cartella c'è una sottocartella "Cleaver", qui troverai il suddetto CDVViewController.m - Apporta le modifiche qui , salva e presto! – Hessius

+0

Sto usando 1.8.1 - quindi forse sono sfortunato? –

1

La correzione per questo (https://issues.apache.org/jira/browse/CB-1482) non è disponibile fino al 2.2. E 'molto rischioso utilizzare la versione instabile e non si preoccupano di compilare il codice sorgente me, così ho provato il seguente trucco:

In MainViewController.m

- (void) showSplashScreen 
{ 
    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    // HACK: PhoneGap pre-2.2 does not support iphone5 splash image well, so we just skip it  
    if (screenBounds.size.height == 568) { 
     return; 
    } 
    [super showSplashScreen]; 
} 

Questo disabiliterà ShowSplashScreen per iPhone5 per evitare l'immagine di lancio più breve aggiunta da PhoneGap (l'immagine di avvio iniziale di iOS viene visualizzata correttamente). Ha funzionato per me e a malapena ho notato alcuna differenza hackerando showSplashScreen per iPhone5.

0

Bianco Flicker

ho avuto questo stesso problema con Cordova 2.2. Penso che valga la pena ricordare che ho dovuto fare un passo in più per far sì che la schermata iniziale venisse visualizzata correttamente.

Ho apportato le modifiche incluse nella risposta @Hessius. Ma ho notato che un flash dello schermo bianco è stato prodotto dopo la comparsa della schermata iniziale.

Nei (nulli) metodo ShowSplashScreen altri possono vedere

if (launchImageFile == nil) { // fallback if no launch image was specified 
//  if (CDV_IsIPhone5()) { 
//   // iPhone 5 or iPod Touch 6th-gen 
//   launchImageFile = @"Default-568h"; 
//  } else { 
     launchImageFile = @"Default"; 
//  } 
} 

Commentando il codice out (o rimuovere) che ho commentato, eliminato il guizzo bianco che vedevo in mezzo carico app e schermo lancio.

Spero che questo aiuti qualcuno!

Problemi correlati