Luk*_*ice 8 cocoa-touch calayer quartz-graphics uiscrollview ipad
我有一个UIScrollView内容大小足以容纳一些小的UIScrollViews用于缩放viewForZoomingInScrollView的分页,这是一个viewController,它包含一个用于绘制PDF页面的CALayer.这使我能够像ibooks PDF阅读器一样浏览PDF.
绘制PDF(平铺图层)的代码位于:
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
Run Code Online (Sandbox Code Playgroud)
只需在可见屏幕上添加"页面"即可自动调用此方法.当我更改页面时,在绘制所有图块之前会有一些延迟,即使已经创建了对象(页面).
我想要做的是在用户滚动到它之前渲染下一页,从而防止可见的平铺效果.但是,我发现如果图层位于屏幕外,将其添加到scrollview中则不会调用drawLayer.
这里有什么想法/常见问题吗?
我试过了:
[viewController.view.layer setNeedsLayout];
[viewController.view.layer setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)
注意:这是在功能上复制ibooks的事实在完整应用程序的上下文中是无关紧要的.
正如我上面提到的,如果它们在屏幕外,CALayers不会渲染.
我最终没有直接将PDF绘制到图层,而是在需要时将PDF页面渲染为图像(渲染1页加减一个焦点页面)
这是渲染代码:
-(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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7194 次 |
| 最近记录: |