gpt4 book ai didi

ios - CGPDFViewController 和多页 PDF(缩放)

转载 作者:行者123 更新时间:2023-11-28 23:16:57 24 4
gpt4 key购买 nike

我正在尝试为 iOS 创建一个基本的 PDF 查看器,但我几乎被卡住了。我只希望它能够查看 PDF 并跳转到特定页面。

这是我到目前为止所做的:

#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 的第一页,但是当我尝试转到下一页时,它会停留在第一页上,有时在缩放时我可以看到第二页的部分内容。

谁能指出我正确的方向?

最佳答案

Apple 的 ZoomingPDFViewer 提供了一个简单的例子。 http://developer.apple.com/library/ios/#samplecode/ZoomingPDFViewer/Introduction/Intro.html

关于ios - CGPDFViewController 和多页 PDF(缩放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5879699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com