2011-05-04 37 views
0

我想为iOS创建一个基本的PDF查看器,而且我几乎卡住了。我只希望它能够查看PDF并跳转到特定页面。CGPDFViewController和多页PDF(zomming)

这是我迄今所做的:

#import "SFPDFViewerController.h" 
#import <QuartzCore/QuartzCore.h> 

@implementation SFPDFViewerController 
@synthesize currentPageIndex; 

- (void)viewDidLoad 
{ 
    currentPageIndex = 1; 

    myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef)[NSURL URLWithString:@"file:///Users/soulstorm/Desktop/Basic%20UNIX%20Tutorial.pdf"]); 
    myPageRef = CGPDFDocumentGetPage(myDocumentRef, currentPageIndex); 
    //CGRect pageRect = CGRectIntegral(CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox)); 
    CGRect pageRect = self.view.bounds; 

    CATiledLayer *tiledLayer = [CATiledLayer layer]; 
    tiledLayer.delegate = self; 
    tiledLayer.tileSize = CGSizeMake(200.0, 200.0); 
    tiledLayer.levelsOfDetail = 1000; 
    tiledLayer.levelsOfDetailBias = 1000; 
    tiledLayer.frame = pageRect; 

    myContentView = [[UIView alloc] initWithFrame:pageRect]; 
    [myContentView.layer addSublayer:tiledLayer]; 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin = CGPointZero; 
    viewFrame.size.height-= 44; 

    scrollView = [[UIScrollView alloc] initWithFrame:viewFrame]; 
    scrollView.delegate = self; 
    scrollView.contentSize = pageRect.size; 
    scrollView.maximumZoomScale = 3.0; 
    [scrollView addSubview:myContentView]; 

    [self.view addSubview:scrollView]; 

    [self.view setBackgroundColor:[UIColor whiteColor]]; 
    [scrollView setBackgroundColor:[UIColor whiteColor]]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return myContentView; 
} 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    NSLog(@"draw layer..."); 
    CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0); 
    CGContextFillRect(ctx, CGContextGetClipBoundingBox(ctx)); 
    CGContextTranslateCTM(ctx, 0.0, layer.bounds.size.height); 
    CGContextScaleCTM(ctx, 1.0, -1.0); 
    CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(myPageRef, kCGPDFCropBox, layer.bounds, 0, true)); 
    CGContextDrawPDFPage(ctx, myPageRef); 
} 

#pragma mark - Functions 
- (IBAction)goToNextPage:(id)sender 
{ 
    [self displayNextPage]; 
} 
- (IBAction)goToPreviewsPage:(id)sender 
{ 
    [self displayPreviewsPage]; 
} 

- (void)displayNextPage 
{ 
    currentPageIndex++; 
    [self reloadCurrentPage]; 
} 
- (void)displayPreviewsPage 
{ 
    currentPageIndex--; 
    [self reloadCurrentPage]; 
} 
- (void)reloadCurrentPage 
{ 
    NSLog(@"reloading current page... %i", currentPageIndex); 
    myPageRef = CGPDFDocumentGetPage(myDocumentRef, currentPageIndex); 
    //[self.view setNeedsDisplay]; 
    //[self.view.layer setNeedsDisplay]; 
    //[myContentView.layer setNeedsDisplay]; 
} 
#pragma mark - 
- (void)dealloc 
{ 
    [myContentView release]; 
    myContentView = nil; 
    CGPDFDocumentRelease(myDocumentRef); 
    myDocumentRef = NULL; 
    myPageRef = NULL; 
    [super dealloc]; 
} 
@end 

上面的代码显示PDF的第一页corectly,但是当我尝试去到下一个页面,它仍将放在了第一位,有时在缩放时,我可以看到第二页的部分内容。

任何人都可以指向正确的方向吗?

回答