Hallo zusammen,
ich baue gerade einen PDF Reader für das iPad. Der soll ein mehrseitiges PDF darstellen, in dem geblättert & gezommt wereden kann. Ich mache das Ganze mit CGContextDrawPDFPage etc. Also nicht mit UIWebView. Den WebView will ich dazu auch nicht nutzen.
Mit dem unteren Aufruf, wird bei mir aber nur die letzte Seite im PDF dargestellt, weil die drawLayer Methode nur die eine Seite zugewiesen bekommt. Wie kann ich der Methode denn Contextabhängig mitteilen, welche Seite sie darstellen soll?
Alles anzeigen
Danke schon mal
ich baue gerade einen PDF Reader für das iPad. Der soll ein mehrseitiges PDF darstellen, in dem geblättert & gezommt wereden kann. Ich mache das Ganze mit CGContextDrawPDFPage etc. Also nicht mit UIWebView. Den WebView will ich dazu auch nicht nutzen.
Mit dem unteren Aufruf, wird bei mir aber nur die letzte Seite im PDF dargestellt, weil die drawLayer Methode nur die eine Seite zugewiesen bekommt. Wie kann ich der Methode denn Contextabhängig mitteilen, welche Seite sie darstellen soll?
Quellcode
- @implementation PDFView2ViewController
- @synthesize pdfview,oneSite;
- const CGFloat kScrollObjHeight = 1024.0;
- const CGFloat kScrollObjWidth = 768.0;
- const NSUInteger kNumImages = 10;
- -(void)click:(id)sender
- {
- PDFWebViewController *viewC = [[PDFWebViewController alloc]initWithNibName:@"PDFWebView" bundle:nil];
- [self.view addSubview:viewC.view];
- }
- /*
- // The designated initializer. Override to perform setup that is required before the view is loaded.
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
- if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
- // Custom initialization
- }
- return self;
- }
- */
- /*
- // Implement loadView to create a view hierarchy programmatically, without using a nib.
- - (void)loadView {
- }
- */
- - (void)layoutScrollImages
- {
- UIView *view = nil;
- NSArray *subviews = [myContentView subviews];
- // reposition all image subviews in a horizontal serial fashion
- CGFloat curXLoc = 0;
- for (view in subviews)
- {
- if ([view isKindOfClass:[UIView class]] && view.tag > 0)
- {
- CGRect frame = view.frame;
- frame.origin = CGPointMake(curXLoc, 0);
- view.frame = frame;
- curXLoc += (kScrollObjWidth);
- NSLog(@"pos view %@",view);
- }
- }
- // set the content size so it can be scrollable
- [scrollView setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView bounds].size.height)];
- //scrollView.contentSize = pageRect.size;
- myContentView.frame = CGRectMake(0, 0,scrollView.contentSize.width,scrollView.contentSize.height);
- NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
- }
- // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- - (void)viewDidLoad {
- [super viewDidLoad];
- CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("05_DMag1003_InterviewSpengler_RZ.pdf"), NULL, NULL);
- myDocumentRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
- NSUInteger i;
- CGRect pageRect;
- myContentView = [[UIView alloc]init];
- for (i = 0; i <= kNumImages; i++)
- {
- myPageRef = CGPDFDocumentGetPage(myDocumentRef, i);
- pageRect = CGRectIntegral(CGPDFPageGetBoxRect(myPageRef, kCGPDFCropBox));
- CATiledLayer *tiledLayer = [CATiledLayer layer];
- tiledLayer.delegate = self;
- tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0);
- tiledLayer.levelsOfDetail = 1000;
- tiledLayer.levelsOfDetailBias = 1000;
- tiledLayer.frame = pageRect;
- /// Hier wird das PDF direkt in den View geschrieben. Funkt bedingt, weil unten die drawLayer Methode
- /// nur die letzte Seite des PDFs aufruft
- UIView *theContentView = [[UIView alloc] initWithFrame:pageRect];
- theContentView.tag = i;
- theContentView.backgroundColor = [UIColor yellowColor];
- [theContentView.layer addSublayer:tiledLayer];
- [myContentView addSubview:theContentView];
- [theContentView release];
- }
- CGRect viewFrame = self.view.frame;
- viewFrame.origin = CGPointZero;
- //scrollView = [[UIScrollView alloc] initWithFrame:viewFrame];
- scrollView.delegate = self;
- //scrollView.contentSize = pageRect.size;
- myContentView.frame = pageRect;
- scrollView.maximumZoomScale = 5;
- [scrollView setCanCancelContentTouches:NO];
- scrollView.clipsToBounds = NO; // default is NO, we want to restrict drawing within our scrollview
- scrollView.scrollEnabled = YES;
- scrollView.bouncesZoom = YES;
- scrollView.pagingEnabled = YES;
- scrollView.backgroundColor = [UIColor grayColor];
- [self layoutScrollImages];
- [scrollView addSubview:myContentView];
- }
- - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
- {
- //NSLog(@"scrollView");
- // größe des contents im scroll view an myContentView anpassen //
- myContentView.frame = CGRectMake(0, 0,scrollView.contentSize.width,scrollView.contentSize.height);
- return myContentView;
- }
- - (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
- {
- 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);
- // Hier ist page immer nur eine feste Zahl. Diese müsste irgendwie contextabhängig sein
- CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(CGPDFDocumentGetPage(myDocumentRef, page), kCGPDFCropBox, layer.bounds, 0, true));
- CGContextDrawPDFPage(ctx, CGPDFDocumentGetPage(myDocumentRef, page));
- }
- #pragma mark UIScrollView delegate methods
- // Override to allow orientations other than the default portrait orientation.
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return YES;
- }
- - (void)didReceiveMemoryWarning {
- // Releases the view if it doesn't have a superview.
- [super didReceiveMemoryWarning];
- // Release any cached data, images, etc that aren't in use.
- }
- - (void)viewDidUnload {
- // Release any retained subviews of the main view.
- // e.g. self.myOutlet = nil;
- }
- - (void)dealloc {
- [super dealloc];
- [pdfview release];
- [oneSite release];
- }
- @end
Danke schon mal