2015-10-09 7 views
7

Ho riscontrato un problema con UIWebView e l'esecuzione di giochi HTML 5 (su cui sta lavorando un altro sviluppatore). Abbiamo provato due diverse opzioni e nessuna delle due è ottimale.UIWebView HTML 5 gioco Lentezza disegno su tela in iOS 9 o arresto anomalo WebGL in iOS 8.0 e versioni successive

Opzione 1: esegue il rendering del gioco HTML 5 con "disegno su tela". Quando lo fa in questo modo, non si verifica alcun arresto anomalo, tuttavia in iOS 9 quando torniamo indietro nell'app dallo sfondo, la vista Web viene caricata di nuovo, ma il gioco si sposta molto più lentamente del normale (problema non su iOS 7.1 e versioni successive) . Molto più lentamente sto parlando delle animazioni che non si muovono con la stessa velocità che erano quando caricavamo il gioco per la prima volta. La cosa strana di questo problema è che anche se l'utente apre un gioco HTML 5 diverso (stiamo aggiungendo più giochi), le animazioni sono anche più lente per quel gioco. Ho provato a chiudere il controller di visualizzazione Web quando viene pubblicato UIApplicationWillResignActiveNotification. Quando imposto il gioco in questo modo, la lentezza si verifica solo se l'app è in 4 secondi (è molto strano).

Opzione 2: esegue il rendering del gioco con "WebGL". Quando esegue il rendering in questo modo, l'app si arresta in modo anomalo quando l'app viene visualizzata in background su iOS 8.0 e versioni successive. La mia ricerca sul crash è che iOS non può disegnare OpenGL ES in background. Suppongo che i comandi WebGL stiano eseguendo comandi simili come farebbe OpenGL ES, quindi il crash. L'eliminazione di Web View Controller su UIApplicationWillResignActiveNotification causa ancora l'arresto anomalo.

Qualcun altro ha mai affrontato una situazione come questa?

risposta

2

Non ho trovato una buona soluzione al problema, ma ho trovato un lavoro.

Quando ottengo il messaggio App si ridurrà attivo, rimuovo UIWebView dalla sottoview di UIWebViewController. Quando viene visualizzato il messaggio Did Become Active, aggiungo UIWebView alla sottoview di UIWebViewController.

Questa soluzione funziona in entrambi i casi.

+0

Da questo è possibile che siano stati attivati ​​eventi JavaScript che interrompono e riavviano l'animazione, in modo che ciò non avvenga quando si utilizza il metodo OpenGL ES –

+0

Una delle soluzioni che abbiamo provato è stata sospendere il gioco (chiamando una funzione JavaScript sul Web vista). La funzione mostrerebbe una schermata di pausa. Quando abbiamo provato questa soluzione, stavano accadendo gli stessi problemi. –

+0

Sì, se si fa apparire una schermata di pausa si può ancora avere il ciclo di disegno in esecuzione semplicemente disegnando una schermata di pausa. Quello che stavo cercando di dire era di costruire il tuo ciclo di disegno usando 'setTimeout();' quindi puoi mettere un metodo di pausa che chiama 'clearTimeout();' e il tuo curriculum richiama semplicemente il tuo metodo di disegno che alla fine usa ' setTimeout' tuttavia senza testarlo è tutta teoria basata sulla mia esperienza. :) Non sto dicendo di usarlo ma ho implementato una chiamata Draw in 2D usando deltaTime e gestione basata sul timeout http://650h.rs/1R1f1uv –