2010-09-30 19 views
8

Tengo una megafonía UIScrollView con un tamaño de contenido lo suficientemente grande como para contener un número pequeño de UIScrollViews para acercar, el viewForZoomingInScrollView es un control de vista que contiene un CALayer para dibujar una página PDF. Esto me permite navegar a través de un PDF muy parecido al lector de PDF ibooks.CALayer y Representación fuera de pantalla

El código que dibuja el PDF (capas de azulejos) se encuentra en:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 

y simplemente añadiendo una 'página' de la pantalla visible llama a este método de forma automática. Cuando cambio de página, hay un poco de retraso antes de que se dibujen todas las teselas, aunque el objeto (página) ya se haya creado.

Lo que quiero hacer es renderizar la página siguiente antes de que el usuario se desplace hacia ella, evitando así el efecto de mosaico visible. Sin embargo, he encontrado que si la capa está ubicada fuera de la pantalla, al agregarla a la vista de desplazamiento no se llama al drawLayer.

¿Alguna de estas ideas/ideas comunes aquí?

que he intentado:

[viewController.view.layer setNeedsLayout]; 
[viewController.view.layer setNeedsDisplay]; 

Nota: El hecho de que este está replicando los iBooks funcionalmente es irrelevante en el contexto de la aplicación completa.

Respuesta

7

Como mencioné anteriormente, los CALayers no se procesan si están fuera de la pantalla.

que al final no dibujar el PDF directamente a la capa, pero en cambio, representa la página PDF a una imagen cuando necesitaba (renders 1 página más y menos uno de la página enfocada)

Aquí está el código de render :

-(UIImage *)renderPDFPageToImage:(int)pageNumber//NSOPERATION? 
{ 
//you may not want to permanently (app life) retain doc ref 

CGSize size = CGSizeMake(x,y);  
UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextTranslateCTM(context, 0, 750); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGPDFPageRef page; //Move to class member 

    page = CGPDFDocumentGetPage (myDocumentRef, pageNumber); 
    CGContextDrawPDFPage (context, page); 

UIImage * pdfImage = UIGraphicsGetImageFromCurrentImageContext();//autoreleased 
UIGraphicsEndImageContext(); 
return pdfImage; 

} 
+2

Debe llamar a 'UIGraphicsEndImageContext' antes de devolver. – Jason

+1

gracias por la atrapada Jason –

Cuestiones relacionadas