CGAffineTransforms Leistung ist auf iOS 7 sehr langsam

8

Im Moment erstelle ich einige Übergänge und transformiere über CGAffineTransform für eine Panning-Ansicht und ich laufe wegen der Transformationsleistung unter iOS 7 und iPhone 4 in Schwierigkeiten.

Ich tauchte in Istruments und protokollierte das Zeug und das schwere Heben ist getan, wenn ich meine Transformationen auf die Ansicht anwende.

Aktuelle Implementierung

%Vor%

Workaround für iOS 7

%Vor%

Frage

Warum ist die Leistung auf iOS 7 und meinem iPhone 4 mit CGAffineTransforms so schlecht? Weil es die gleiche Sache mit dem Offset tut, dann die Rahmeneinstellung in der Problemumgehung. Wenn ich UIView.animateWithDuration() mit transform verwende, läuft es auf 60 fps. Was kann ich tun, um die gesamte Implementierung auf meiner iOS 7 Basis nicht neu zu schreiben?

UPDATE 28. Juli Herausgefunden, dass AutoLayout in diesem Problem möglich ist. Hier ist ein TimeProfiler-Stack von meinen aktuellen Anrufen:

Jetzt stehe ich in meiner aktuellen Implementierung vor einem großen Problem, da ich auf AutoLayout angewiesen bin. Was ist die einfachste Lösung, um diesen Ärger auf iOS 7 zu lösen?

    
mariusLAN 19.06.2015, 06:45
quelle

1 Antwort

4

Während Sie Recht haben, dass sie das Gleiche tun, ist es unter der Haube nicht so einfach - es gibt Matrixmultiplikationen, die überall hin gehen. Mehr dazu finden Sie hier .

Es ist merkwürdig, dass wenn Sie genau das tun, es Ihre Leistung beeinflusst - aber ich denke, dass Ihr Layout kompliziert ist und das erneute Rendern viel Zeit in Anspruch nimmt; Ich hatte tatsächlich das gleiche Problem wie vor einer Woche, also hier ist, was mir geholfen hat:

  • Das Entfernen von AutoLayout aus dieser bestimmten Ansicht hilft sehr viel
  • Manipulation mit Frame sollte verwendet werden, wenn Sie sich nicht drehen / skalieren. Es wird wirklich notwendig, wenn Sie diese verwenden.
  • das Entfernen von Schatten und halbtransparenten Ansichten, besonders wenn es mehr von ihnen hintereinander gibt, löscht WIRKLICH die FPS, wenn die Transformation verwendet wird

Sie können auch versuchen, diese Transformation im asynchronen Aufruf zuzuordnen und sehen, ob das hilft:

%Vor%

Und wenn Sie wirklich etwas Besonderes sein möchten, verwenden Sie POP Framework von Facebook . Es ist großartig für das, was Sie wollen, und es ermöglicht Ihnen, einige ausgefallene Dinge wie Bounce, Sprungkraft usw. zu tun. Hier ist, wie Sie es verwenden können:

%Vor%

Bearbeiten: Wenn Sie nur die Ansicht verschieben, verwenden Sie die Eigenschaft .center, nicht den Frame. Es spart Ihnen die Notwendigkeit, Höhe / Breite wieder zu definieren und gibt Ihnen eine klarere Vorstellung von Ihren Absichten.

    
Jiri Trecak 21.07.2015 12:00
quelle