iOS6 UIwebView CSS3D-Transformationen sind nicht HW-beschleunigt
Habe ich Probleme mit schlechten Blättern Leistung in iOS6 UIWebView-Komponente..In iOS5 scrollen war wirklich flüssig, obwohl. So suchte ich im web etwas gefunden und dieses (Teil der iOS6 beta changelog).
WebKit nicht mehr immer schafft, hardware-beschleunigte Ebenen für die Elemente, die mit dem -webkit-transform: preserve-3d-option. Autoren sollten aufhören, mit dieser option als einen Weg, um die hardware-Beschleunigung.
Dass könnte der Grund sein, da der html-Seite meine app zeigt verwendet viele der css3-Transformationen..
Bitte hat jemand eine Lösung oder Tipps, wie man Kraft Webansicht wechseln Sie zurück zu einer beschleunigten rendering-Modell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
UIWebView immer noch hardware-Beschleunigung, wenn Sie eine 3D-Transformation (z.B.
-webkit-transform: translateZ(0)
). Es einfach nicht mehr funktioniert, wenn Sie nur Verwendung-webkit-transform-style: preserve-3d
.Wenn Sie ein Beispiel, das 3D-Transformationen, aber immer langsamer mit iOS 6, melden Sie es in Apples Bug-Reporter.
Neben der bereits erwähnten änderung der CSS-Eigenschaften, die sind(oder nicht) Auslösung-hardware-Beschleunigung habe ich bemerkt, eine weitere änderung in IOS 6, die nicht bestehen bleiben, da Sie sehr stark auf iOS5 (oder zumindest habe ich nicht wirklich bemerkt vor):
Überschneidungen zwischen hardware-beschleunigten Elemente und nicht-Elemente beschleunigt werden verlangsamen das rendering und die app EINE MENGE.
Wenn Sie irgendwelche überschneidungen zwischen beschleunigten und nicht beschleunigten Elemente, stellen Sie sicher, dass Sie hinzufügen hardware-Beschleunigung, um die anderen Elemente, auch wenn Sie nicht animiert wird oder so, weil Sie neu gerendert, als auch welche, die komplett unterdrücken, oder in einigen Fällen das zurücksetzen der Beschleunigung-Effekt.
Habe ich auch geschrieben, einen kurzen Artikel über diese, wenn Sie wollen, check it out:
http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/
Habe ich an einen einfachen Testfall reproduziert diesen bug in iOS6, und die läuft einwandfrei auf iOS5.1 (auf beiden iPhone 4 und 4S). Der iOS-Chrome-app ist ein guter Ort, um diesen test ausführen, da es bettet ein UIWebView. Ich habe ein video, das werde ich Anhängen sobald Sie lädt zwei iPhone 4 (der Obere läuft iOS 5.1, die andere mit iOS 6) mit diesem Beispiel-Skript in eine PhoneGap 2.0 UIWebView.
Gerade jetzt, es scheint wie diese Elemente SIND hardware-beschleunigte, aber dass es ein bug in apples low-level-pipeline, die tötet Leistung. Wir habe versucht eine Reihe von Problemumgehungen für die hardware-Beschleunigung, und es scheint sicher, dass alles, was ruft die GPU auf iOS5.1 bewirkt eine massive Abschwächung auf iOS6.
Ich würde gerne eine Lösung finden, da die app, die wir bauen, stützt sich ziemlich stark auf diese arbeiten ordnungsgemäß. Wenn jemand einen Fehler in diesem Beispiel, wäre das auch äußerst geschätzt.
EDIT: Der Fehler weiterhin besteht, auch wenn Sie ändern Sie die animate-Funktion wie folgt.
Dies scheint zu bestätigen, dass die Berufung auf die GPU Ursachen dieser Verlangsamung.
EDIT 2: Es gibt ein zusätzliches Beispiel zu Gast bei http://bvgam.es/apple/ die läuft problemlos auf iOS 5.1 und bekommt 1-2 FPS auf iOS 6.
Ersetzen Sie alle Instanzen von
-webkit-transform: translate3d(0,0,0);
Mit
-webkit-transform: translate3d(0,0,0) scale3d(1,1,1);
Er hat Arbeit für mich
CSS Transforms sind in der Tat viel langsamer als iOS 6, zumindest in meiner Anwendung auf dem iPhone 4.
Ich set basic translate (), um das element, anstatt translate3d(), und die Leistung ist gleich geblieben, so denke ich, dass auch translate3d() löst nicht mehr GPU-Beschleunigung. Das klingt wie ein bug.
Als workaround, ich habe versucht, eine andere CSS-Eigenschaften (wie rotate3d(), scale3d(), Perspektive, ...) auf element, aber keiner von Ihnen scheint zu trigger-hardware-Beschleunigung.
Ersetzen Sie alle Instanzen von
-webkit-transform: translate3d(0,0,0);
mit-webkit-perspective: 1000; -webkit-backface-visibility: hidden;
. Dieser arbeitete für mich. Es scheint, dass-webkit-transform: translate3d(0,0,0);
nicht mehr startet hardware-Beschleunigung.Könnte, diese Berichterstattung, die -webkit-transform: translate3d(0,0,0); ist langsamer als iOS 6, bitte geben Sie eine URL, um einige Beispiel-Inhalte, zeigt dies.
Nur damit einige wissen, dass -webkit-transform-origin war vorher hardware beschleunigt, wenn Sie zusammen mit hardware beschleunigte Transformationen, wie translateZ(0), aber es nicht mehr ist.