2010-11-21 12 views
5

mi situación: Creé un UIScrollView con una UIView dentro de la cual llama a una clase Graph que dibuja un gráfico agradable en un contexto. Ahora descubrí que el teléfono no representaría UIView si su ancho es mayor que 8192 píxeles. De hecho, de acuerdo con los documentos de Apple, si lo quiero más grande que 1024px, debería implementar CATiledLayer.UIScrollView y CATiledLayer desde cero

Pero después de leer y buscar en Google mucho, todavía me resulta difícil entender los conceptos básicos de CATiledLayer para esta tarea: de alguna manera estoy perdido entre Quartz y Cocoa y capas y subcapas frente a vistas y subvistas.

Idealmente me gustaría mantener intacta la clase Graph, simplemente dibuje el contexto por completo, divídalo en mosaicos y desplácese. La vista de desplazamiento debe desplazarse horizontalmente, sin necesidad de utilizar el zoom ni el desplazamiento vertical. ¿Es eso posible? Si es así, ¿cómo debería continuar? Tal vez alguien podría darme un esquema, solo algunos puntos de viñetas o pseudocódigo, cómo debería reestructurar la vista de desplazamiento, uiview y la clase de gráfico para usar el mosaico.

Muchas gracias de antemano por cualquier respuesta.

Respuesta

4

Ha pasado un mes desde que lo solicitó, pero aún puede ser útil. Empecé a usar CATiledLayer esta noche. Creo que la idea detrás de un CATiledLayer parece ser que se agrega a una vista:

CATiledLayer *tiled = [CATiledLayer layer]; 
[self.view.layer addSublayer:tiled]; 

y que configura un delegado, la implementación de un solo método:

MyTLDelegate *myDelegate = [[MyTLDelegate alloc] init]; 
tiled.delegate = myDelegate; 
// I haven't checked if CATiledLayer retains myDelegate, check this! 

... 
@implementation MyTLDelegate { 

-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx 
{ 
    CGRect dirtyRect = CGContextGetClipBoundingBox(ctx); 
    // draw! 
} 

eso es básicamente todo lo que hay puede dibujar como si todo el espacio de coordenadas estuviera justo allí. Por lo tanto, solo debería modificar ligeramente su clase Graph para que pueda actuar como delegado de CATiledLayer. En mi caso, fueron 20 minutos bien invertidos, lo que impulsó la experiencia del usuario en varios órdenes de magnitud. (en comparación con hacer el tedioso desplazamiento, escalar y redibujar yo mismo)

ps. este es solo el pseudo código que solicitaste, es posible que necesites un poco de pegamento adicional para que todo funcione, por ej. para calidad y/o tamaños de cuadros.

Cuestiones relacionadas