Sto sviluppando un gioco iP * e utilizzo sia UIKit che OpenGL ES 2.0. Gli elementi UIKit sono renderizzati sulla vista OpenGL e occupano una quantità significativa (arbitraria) di spazio sullo schermo. Devo ammettere che Apple ha fatto un lavoro eccellente e il frame rate del gioco è sempre di 60 FPS.Combinazione di blocchi di animazione UIView e rendering OpenGL ES
Per giungere a questa conclusione ho fatto molte prove per quanto riguarda le prestazioni:
- ho aggiunto un sacco di statica (non in movimento) UIViews oltre la vista OpenGL - OK!
- Ho animato utilizzando codice personalizzato le stesse UView (modifica la proprietà del centro nel metodo drawFrame del mio gioco) - OK !.
- Ho aggiunto molti elementi OpenGL ES sotto Uiviews - OK!
- Ho aggiunto molti elementi OpenGL ES in movimento sotto Uiviews - OK!
Quindi, ora voglio utilizzare il Core Animation Framework per animare gli elementi UIKit. Io uso
[UIView animateWithDuration:delay:options:animations:completion:]
in oder per eseguire le animazioni (Io target iOS 4 o più recente).
Il problema ora è che il frame rate ha questo comportamento strano: a volte ho 60 fps con molti molti elementi UIKit animazione (30 elementi è OK per me) e altre volte il frame rate è ovviamente sotto 60 fps anche con un singolo animando l'elemento UIKit ma non riesco a misurarlo con gli strumenti! Lasciatemi spiegare di più: Quando apro gli strumenti e controllo l'animazione di base e/o il driver OpenGL ottengo sempre 60 fps. Ma è ovvio che questo non è il caso, posso vedere con i miei occhi le animazioni OpenGL per muoversi molto più lentamente delle corrispondenti animazioni UIKit in alto. Se rimuovo gli elementi UIKit dalla vista, il frame rate ritorna normale. Una situazione simile a quella che descrivo qui accade in qualsiasi gioco OpenGL ES quando l'utente cambia il volume del dispositivo mentre gioca. Quando la vista trasparente che mostra il volume corrente inizia a dissolversi e fino a quando non svanisce completamente, la frequenza fotogrammi cala drasticamente, ma negli strumenti (ho fatto anche questo test) è bloccata su 60 fps!
Quindi, per riassumere: a volte ottengo veri 60 fps con animazioni a blocchi senza alti e bassi per una corsa e altre volte ottengo 60 fps falsi senza alti e bassi.
Avete qualche soluzione a questo? Tutti i test sono stati eseguiti su un iPad 2 e iPhone 3GS con iOS 5.1