在iPad上呈现200页的PDF文档

时间:2011-02-15 11:55:02

标签: objective-c ipad

我必须开发一个以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];
}

这很好用。但是,如果我快速滑动,更多时候后续页面不会立即加载。屏幕变白。

如何解决这个问题,请指导。

此致 兰詹

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

其中一个明显的问题是drawRect可能会被定期调用,并且可能只请求您绘制一些视图的rect。

在您的实施中,您:

  • 从磁盘读取pdf。这需要花费大量时间,特别是因为可能会以高频率调用drawRect。

  • 阅读pdf。这需要一些时间 - 可以避免在drawRect期间发生。

  • 绘制一页。只绘制您需要绘制的内容。

  • 处理pdf。您应该在pdf视图可见的同时保留pdf文档,而不是每次需要绘制时都从磁盘读取。

相关问题