Cocoa touch CALayer和屏幕外渲染

Cocoa touch CALayer和屏幕外渲染,cocoa-touch,ipad,uiscrollview,quartz-graphics,calayer,Cocoa Touch,Ipad,Uiscrollview,Quartz Graphics,Calayer,我有一个分页UIScrollView,其内容大小足以容纳许多用于缩放的小UIScrollView,viewForZoomingInScrollView是一个视图控制器,它包含用于在其上绘制PDF页面的CALayer。这使我能够像ibooks PDF阅读器一样浏览PDF 绘制PDF(平铺层)的代码位于: - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 只需在可见屏幕上添加一个“页面”即可自动调用此方法。当我更改页面时

我有一个分页
UIScrollView
,其内容大小足以容纳许多用于缩放的小UIScrollView,
viewForZoomingInScrollView
是一个视图控制器,它包含用于在其上绘制PDF页面的CALayer。这使我能够像ibooks PDF阅读器一样浏览PDF

绘制PDF(平铺层)的代码位于:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
只需在可见屏幕上添加一个“页面”即可自动调用此方法。当我更改页面时,在绘制所有平铺之前会有一些延迟,即使对象(页面)已经创建

我希望能够在用户滚动到下一页之前呈现下一页,从而防止出现可见的平铺效果。但是,我发现如果图层位于屏幕外,将其添加到scrollview不会调用
drawLayer

这里有什么想法/常见问题吗

我试过:

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

注意:这是在功能上复制ibooks的事实在整个应用程序的上下文中是不相关的。

正如我上面提到的,CALayers在屏幕外时不会渲染

我最终没有直接将PDF绘制到图层上,而是在需要时将PDF页面渲染为图像(渲染一个页面加上和减去一个聚焦页面)

以下是渲染代码:

-(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;

}

返回前需要调用
UIGraphicsEndImageContext