ecco il codice:Perché questo codice CATiledLayer/PDF è lento?
https://www.dropbox.com/s/o42wy36x4qhrbpt/PDFScroller.zip
Ho preso il WWDC 2010 di codice PhotoScroller
esempio che implementa annidato UIScrollViews
per lo zoom, all'interno di un UIScrollView
per il paging, e scambiati che cosa ho pensato che sarebbe minima quantità di codice necessario per visualizzare un PDF multipagina invece di immagini.
Funziona. Ma è lento sul mio iPhone4, circa tre secondi per dipingere la prima pagina, e ancora più lento sul mio iPod Touch. Posso vederlo dipingere le singole tessere. Questo stesso PDF si apre già più rapidamente, senza disegno di tile visibile, in un'implementazione CATiledLayer
alternativa che utilizza semplicemente un singolo CATiledLayer
/UIScrollView
e tocca gli eventi per cambiare pagina. Mi piacerebbe usare questa tecnica PhotoScroller
, è molto bella.
L'ho guardato con CPU Sampler in Instruments, e non sembra essere il codice di rendering PDF, sembra che il tempo sia occupato dal threading e dalla messaggistica. Sarei grato se qualcuno potesse aiutare a sottolineare cosa sta facendo questo esempio per sostenere il sovraccarico.
Grazie,
Jim
Update 1: avevo usato in origine la tecnica TilingView
classe dal codice di esempio di definire
+ (Class) layerClass {
return [CATiledLayer class];
}
E poi il disegno in - (void)drawRect:(CGRect)rect
ma passato a la sottoclasse esplicita CATiledLayer
come primo tentativo di vedere se avrebbe fatto la differenza, ma non lo fece, e quindi ho lasciato il codice così com'è per la pubblicazione qui. C'è anche una perdita [tiledLayer release];
mancante in TilingView.
Sei riuscito a trovare una soluzione per questo? Stavo lavorando allo stesso. –
Sì, l'aumento delle dimensioni della piastrella migliora in modo significativo le prestazioni. – jbm
Ottenuto, ha appena aggiunto una nuova riga nel codice: tiledLayer.tileSize = CGSizeMake (512, 512); Ha funzionato davvero bene! Grazie. –