Hier ist der Code:Warum ist dieser CATiledLayer/PDF-Code langsam?
https://www.dropbox.com/s/o42wy36x4qhrbpt/PDFScroller.zip
Ich nahm die WWDC 2010 PhotoScroller
Beispielcode, der für das Zoomen verschachtelte UIScrollViews
implementiert, in einem UIScrollView
für Paging und ausgelagert, was ich dachte wäre minimale Menge an Code erforderlich zum Anzeigen einer mehrseitigen PDF-Datei anstelle von Bildern.
Es funktioniert. Aber es ist langsam auf meinem iPhone4, ungefähr drei Sekunden, um die erste Seite zu malen, und noch langsamer auf meinem iPod Touch. Ich kann mir die einzelnen Fliesen ansehen. Das gleiche PDF öffnet sich bereits schneller, ohne sichtbare Kachelzeichnung, in einer alternativen CATiledLayer
Implementierung, die einfach eine einzige verwendet und Ereignisse berühren, um Seiten zu wechseln. Ich würde gerne diese PhotoScroller
Technik verwenden, es ist sehr nett.
Ich sah es mit CPU-Sampler in Instruments, und es scheint nicht der PDF-Rendering-Code zu sein, es sieht aus wie die Zeit in Threading und Messaging aufgenommen wird. Ich würde es schätzen, wenn jemand helfen könnte, aufzuzeigen, was dieses Beispiel tut, um den Overhead zu verursachen.
Danke,
Jim
Update 1: Früher habe ich ursprünglich hatte die TilingView
Klasse Technik aus dem Beispielcode von
+ (Class) layerClass {
return [CATiledLayer class];
}
zu definieren und dann in - (void)drawRect:(CGRect)rect
Zeichnung aber umgeschaltet die explizite CATiledLayer
Unterklasse als ein erster Versuch zu sehen, ob es einen Unterschied machen würde, aber es nicht, und Also habe ich den Code unverändert für die Veröffentlichung hier gelassen. Es gibt auch eine fehlende [tiledLayer release];
Leck in TilingView.
Haben Sie es geschafft, eine Lösung dafür zu finden? Ich arbeitete an demselben. –
Ja, eine Erhöhung der Kachelgröße verbessert die Leistung erheblich. – jbm
Haben Sie es, nur eine neue Zeile im Code hinzugefügt: tiledLayer.tileSize = CGSizeMake (512, 512); Hat wirklich gut funktioniert! Vielen Dank. –