Po pierwsze, chcę wyjaśnić tutaj trochę terminologii. Kiedy ludzie mówią o Core Graphics, zazwyczaj odnoszą się do rysunku 2D Quartz, który jest opartym na wektorach 2D interfejsem do rysowania. Służy do rysowania elementów wektorowych na ekranie lub w kontekstach poza ekranem, takich jak pliki PDF. Animacja rdzenia jest odpowiedzialna za animację, układ i pewne ograniczone efekty trójwymiarowe obejmujące warstwy prostokątne i elementy interfejsu użytkownika. OpenGL ES jest interfejsem API niższego poziomu służącym do rozmawiania ze sprzętem graficznym na urządzeniach z systemem iOS zarówno dla rysunków 2D, jak i trójwymiarowych.
Bardzo dużo zadajesz w swoim pytaniu, a ocena tego, co najlepsze w każdym scenariuszu, jest subiektywna i zależy wyłącznie od programisty i jego konkretnych potrzeb. Mogę jednak podać kilka ogólnych wskazówek.
Ogólnie rzecz biorąc, zalecenie, które zobaczysz w dokumentacji Apple oraz w prezentacjach inżynierów, oznacza, że najlepiej jest używać najwyższego poziomu abstrakcji, który rozwiązuje dany problem.
Jeśli chcesz tylko narysować interfejs użytkownika 2D, pierwszą rzeczą, którą powinieneś wypróbować, jest zaimplementowanie tego przy użyciu dostarczonych przez Apple elementów UIKit. Jeśli nie mają potrzebnych możliwości, utwórz niestandardowe UIViews. Jeśli projektujesz wieloplatformowy kod Mac-iOS (jak w środowisku Core Plot), możesz przejść do używania niestandardowych CALayerów Core Animation.Każdy krok w tym procesie wymaga napisania więcej kodu, aby poradzić sobie z rzeczami, które powyższy poziom zrobił dla ciebie.
Możesz zrobić zaskakującą ilość rzeczy z Core Animation, z całkiem niezłą wydajnością. Nie ogranicza się to tylko do animacji 2D, ale może również rozszerzyć się na proste prace trójwymiarowe.
OpenGL ES znajduje się pod rysunkiem wszystkich elementów widocznych na ekranie urządzenia z systemem iOS, ale nie jest to dla użytkownika widoczne. Jako taki zapewnia najmniej abstrakcji do renderowania na ekranie i wymaga napisania większości kodu, aby coś zrobić. Może być jednak konieczne w sytuacjach, w których chcesz uzyskać największą wydajność z wyświetlania 2-D (np. W grze akcji) lub renderować prawdziwe obiekty 3D i środowiska.
Ponownie, zalecam, aby ludzie zaczęli od najwyższego poziomu abstrakcji podczas pisania aplikacji, i upuszczali je tylko wtedy, gdy stwierdzą, że nie mogą czegoś zrobić lub wydajność nie mieści się w specyfikacji, którą próbują osiągnąć. Mniej linii kodu ułatwia pisanie, debugowanie i konserwację aplikacji.
To powiedziawszy, istnieją pewne fajne ramy, które rozwinęły się wokół abstrakcji OpenGL ES, takich jak cocos2D i Unity 3D, co może ułatwić pracę z OpenGL ES w wielu sytuacjach. W każdym przypadku musisz ocenić, co ma sens w przypadku konkretnych potrzeb Twojej aplikacji.
Czy zamieniłbyś nauczanie OpenGL z Cocos2d (na przykład) w grach 2D? Zmieniłem swój oryginalny post, dodałem "Łatwiejszą integrację z innymi elementami interfejsu użytkownika". Dzięki, Andrew. – Peres
Dodam, że podejście combo może również dobrze działać w niektórych sytuacjach - użyj CoreGraphics, aby narysować zasób z góry, a następnie OpenGL, aby rozmieścić i zaprezentować każdą klatkę. –