Ich entwickle ein iP * Spiel und ich benutze sowohl UIKit als auch OpenGL ES 2.0. Die UIKit-Elemente werden über die OpenGL-Ansicht gerendert und belegen einen beträchtlichen (beliebigen) Bildschirmbereich. Ich muss zugeben, dass Apple eine hervorragende Arbeit geleistet hat und die Framerate des Spiels immer 60 FPS beträgt.
Um zu dieser Schlussfolgerung zu kommen, habe ich viele Tests bezüglich der Leistung durchgeführt:
Nun möchte ich das Core Animation Framework nutzen, um die UIKit-Elemente zu animieren. Ich benutze
%Vor%in oder um die Animationen auszuführen (ich ziele auf iOS 4 oder neuer).
Das Problem ist jetzt, dass die Bildrate dieses seltsame Verhalten hat: Manchmal bekomme ich 60 fps mit viele UIKit animierenden Elementen (30 Elemente sind OK für mich) und ein paar mal ist die Bildrate offensichtlich unter 60 fps, selbst mit einem single animierenden UIKit-Element, aber ich kann es nicht mit Instrumenten messen! Lassen Sie mich mehr erklären: Wenn ich Instrumente öffne und die Kernanimation und / oder den OpenGL-Treiber beobachte, bekomme ich immer 60 fps. Aber ist es offensichtlich, dass dies nicht der Fall ist, ich kann mit meinen Augen sehen, dass sich die OpenGL-Animationen viel langsamer bewegen als die entsprechenden UIKit-Animationen auf der Oberseite. Wenn ich die UIKit-Elemente aus der Ansicht entferne, wird die Bildrate wieder normal. Eine ähnliche Situation wie die, die ich hier beschreibe, passiert in jedem OpenGL ES-Spiel, wenn der Benutzer die Lautstärke des Geräts während des Spiels ändert. Wenn die transparente Ansicht, die die aktuelle Lautstärke anzeigt, anfängt auszufallen und bis sie vollständig verschwindet, fällt die Bildrate drastisch ab, aber in den Instrumenten (ich habe diesen Test auch gemacht) klemmt sie auf 60 fps!
Also, um es zusammenzufassen: Manchmal bekomme ich echte 60 fps mit Blockanimationen ohne Höhen und Tiefen für einen Lauf und manchmal bekomme ich falsche 60 fps ohne Höhen und Tiefen.
Haben Sie eine Lösung? Alle Tests wurden auf einem iPad 2 und iPhone 3GS mit iOS 5.1 durchgeführt
Ich habe es geschafft, das Problem zu lösen und jetzt kann ich UIView block / core-basierte Animationen in meinem OpenGL-Spiel ohne Leistungsabfall kombinieren.
Die Lösung ist ziemlich einfach:
Am besten,
Tags und Links iphone animation opengl-es uikit quartz-graphics