我必须开发一个以PDF作为输入的应用程序,该PDF文档有200页。我正在使用UIScrollView向左和向右滑动。在每次滑动时,我正在绘制PDF文档。代码如下:
- (id)initWithFrame:(CGRect)frame content:(NSString *)aPDFPage type:(NSString *)contentType
{
if ((self = [super initWithFrame:frame]))
{
// Initialization code
self.backgroundColor = [UIColor whiteColor];
pageRef = [[NSString alloc]initWithString:aPDFPage];
pageTypeRef = [[NSString alloc]initWithString:contentType];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
ctx = UIGraphicsGetCurrentContext();
[self drawPDF];
}
-(void)drawPDF
{
NSString *pathToPdfDoc = [[NSBundle mainBundle] pathForResource:self.pageRef ofType:self.pageTypeRef];
NSURL *pdfUrl = [NSURL fileURLWithPath:pathToPdfDoc];
document = CGPDFDocumentCreateWithURL((CFURLRef)pdfUrl);
page = CGPDFDocumentGetPage(document, 1);
CGContextTranslateCTM(ctx, 0.0, [self bounds].size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGAffineTransform transform = aspectFit(CGPDFPageGetBoxRect(page, kCGPDFTrimBox),CGContextGetClipBoundingBox(ctx));
CGContextConcatCTM(ctx, transform);
CGContextSetInterpolationQuality(ctx, kCGInterpolationLow);
CGContextSetRenderingIntent(ctx, kCGRenderingIntentDefault);
CGContextDrawPDFPage(ctx, page);
CGPDFDocumentRelease(document);
}
-(void)dealloc
{
[pageRef release];
[pageTypeRef release];
[super dealloc];
}
这很好用。但是,如果我快速滑动,更多时候后续页面不会立即加载。屏幕变白。
如何解决这个问题,请指导。
此致 兰詹
答案 0 :(得分:1)
答案 1 :(得分:1)
其中一个明显的问题是drawRect可能会被定期调用,并且可能只请求您绘制一些视图的rect。
在您的实施中,您:
从磁盘读取pdf。这需要花费大量时间,特别是因为可能会以高频率调用drawRect。
阅读pdf。这需要一些时间 - 可以避免在drawRect期间发生。
绘制一页。只绘制您需要绘制的内容。
处理pdf。您应该在pdf视图可见的同时保留pdf文档,而不是每次需要绘制时都从磁盘读取。