2012-03-19 11 views
27

Estoy usando un código bastante sencillo para mostrar un PDF con zoom en una vista de desplazamiento, y ha funcionado muy bien en el iPad 2 y en el iPad original. Pero es asombrosamente lento en el iPad 3. Sé que estoy presionando más píxeles, pero el rendimiento de renderizado es simplemente inaceptable.CATiledLayer PDF El rendimiento es deficiente en iPad 3 Retina Display

En iOS 5.0 y posterior, la propiedad tileSize se pinza arbitrariamente en 1024, lo que significa que los mosaicos tienen la mitad de ese tamaño en la pantalla Retina. ¿Alguien ha encontrado una manera de superar esta limitación?

De lo contrario, ¿alguien ha encontrado una forma de mejorar la velocidad del CATiledLayer en el iPad 3?

+2

ver http://stackoverflow.com/questions/9691891/catiledlayer-in-ipad-retina-simulator-yields-poor-performance – Mat

+1

La pregunta Mat señaló que tiene una solución para su problema Mire todas las respuestas, ya que hay una mejor solución para su caso disponible, que la presente en la respuesta aceptada. –

+0

Gracias, Mihai. Lamentablemente, ese enlace no tiene una solución per se; solo algunos retoques. Y esos están principalmente orientados para el simulador y por lo tanto no son de interés para aquellos de nosotros que desarrollamos para el dispositivo propiamente dicho. Por ejemplo, un ajuste sugiere bajar el contentScaleFactor a 0.5, lo que hace que la capa se renderice en la resolución del iPad 2 (sin retina). Más rápido, sí, pero no es aceptable para un producto de envío. – dkmp

Respuesta

1

¿Ha intentado establecer shouldRasterize en YES en la capa?

+0

Bueno, sí, rastrillar la capa, por supuesto, mejora el rendimiento. Pero la rasterización elimina el beneficio de las capas de mosaico: el redibujado de las teselas a medida que se acerca la imagen. Las teselas ráster se ven terribles en cualquier nivel de zoom mayor a 1.0. – dkmp

0

¿Ejecutó un perfilador de tiempo en estos sorteos y descartó la posibilidad de sorteos redundantes?

he tenido algo de dibujo doble raro, que se encuentra fácilmente usando:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context 
{ 
    NSLog(@"draw %@", NSStringFromCGRect(CGContextGetClipBoundingBox(context))); 
    // draw pdf 
} 

También hay una variedad de ajustes para jugar con:

  • tiledLayer.levelsOfDetail = 2
  • tiledLayer.levelsOfDetailBias = 4
  • tiledLayer.tileSize = self.bounds.size
  • CGContextSetInterpolationQuality(context, kCGInterpolationLow)
  • CGContextSetRenderingIntent(context, kCGRenderingIntentDefault)
  • self.contentScaleFactor = 1.0
Cuestiones relacionadas