In primo luogo, voglio chiarire un po 'di terminologia qui. Quando le persone parlano di Core Graphics, generalmente si riferiscono al disegno 2D di Quartz, che è un'API di disegno vettoriale 2D. È usato per disegnare elementi vettoriali sullo schermo o in contesti fuori schermo come i PDF. Core Animation è responsabile dell'animazione, del layout e di alcuni effetti 3D limitati che coinvolgono livelli rettangolari e elementi dell'interfaccia utente. OpenGL ES è un'API di livello inferiore per parlare con l'hardware grafico su dispositivi iOS sia per il disegno 2D che 3D.
Stai chiedendo molto alla tua domanda e il giudizio su cosa è meglio in ogni scenario è soggettivo e completamente all'altezza dello sviluppatore e delle loro esigenze particolari. Posso, tuttavia, fornire alcuni suggerimenti generali.
In generale, una raccomandazione che si vedrà nella documentazione e nelle presentazioni di Apple da parte degli ingegneri è che si utilizza al meglio il più alto livello di astrazione che risolve il problema specifico.
Se è sufficiente disegnare un'interfaccia utente 2D, la prima cosa da provare è implementare questo utilizzando gli elementi UIKit forniti da Apple. Se non hanno le capacità di cui hai bisogno, crea visualizzazioni utente personalizzate. Se stai progettando un codice multipiattaforma Mac-iOS (come nel framework Core Plot), potresti utilizzare i CALayer Core Animation personalizzati.Ogni passaggio in questo processo richiede di scrivere più codice per gestire le cose che il livello sopra ha fatto per te.
Si può fare una quantità sorprendente di cose con Core Animation, con prestazioni piuttosto buone. Questo non è solo limitato alle animazioni 2-D, ma può estendersi anche in qualche semplice lavoro 3D.
OpenGL ES è sotto il disegno di tutto ciò che vedi sullo schermo per un dispositivo iOS, anche se questo non è esposto a te. In quanto tale, fornisce la minima astrazione per il rendering su schermo e richiede di scrivere la maggior parte del codice per ottenere qualcosa. Tuttavia, può essere necessario in situazioni in cui si desidera estrarre la maggior parte delle prestazioni dal display 2-D (ad esempio in un gioco d'azione) o per rendere veri oggetti e ambienti 3D.
Di nuovo, tendo a raccomandare che le persone inizino al più alto livello di astrazione quando scrivono un'applicazione, e scendono solo quando scoprono che non possono fare qualcosa o che le prestazioni non rientrano nelle specifiche che stanno cercando di colpire. Meno linee di codice rendono le applicazioni più facili da scrivere, eseguire il debug e mantenere.
Detto questo, ci sono alcuni buoni framework che si sono sviluppati attorno all'estrazione di OpenGL ES, come cocos2D e Unity 3D, che potrebbero rendere più semplice il lavoro con OpenGL ES in molte situazioni. Per ogni caso, dovrai valutare cosa ha senso per le particolari esigenze della tua applicazione.
Vuoi scambiare l'apprendimento di OpenGL con Cocos2d (ad esempio) in giochi 2D? Ho modificato il mio post originale, ho aggiunto "l'integrazione più semplice con altri elementi dell'interfaccia utente". Grazie Andrew. – Peres
Aggiungo che un approccio combo può anche funzionare bene per alcune situazioni: usa CoreGraphics per disegnare un asset in anticipo, quindi OpenGL per organizzarlo e presentarlo ogni frame. –