2011-11-24 50 views
1

您好我最近與Leaves api工作,我有這個問題,我需要顯示一個PDF文件,並且我的ViewController類有一個nib文件,我實現代碼基於API示例代碼但沒有顯示任何東西!我錯過了什麼嗎?iPhone:實現Ole葉API

#import "BookViewController.h" 
#import "Utilities.h" 

@implementation BookViewController 



/////EDITED////////////// 


- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
    if (self = [super initWithNibName:@"BookViewController" bundle:nil]) { 

     CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("paper.pdf"), NULL, NULL); 
     pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); 
     CFRelease(pdfURL); 

    } 
    return self; 
} 





- (void)dealloc { 
    CGPDFDocumentRelease(pdf); 
    [super dealloc]; 
} 



- (void) displayPageNumber:(NSUInteger)pageNumber { 
    self.navigationItem.title = [NSString stringWithFormat: 
           @"Page %u of %u", 
           pageNumber, 
           CGPDFDocumentGetNumberOfPages(pdf)]; 
} 



#pragma mark LeavesViewDelegate methods 

- (void) leavesView:(LeavesView *)leavesView willTurnToPageAtIndex:(NSUInteger)pageIndex { 
    [self displayPageNumber:pageIndex + 1]; 
} 



#pragma mark LeavesViewDataSource methods 

- (NSUInteger) numberOfPagesInLeavesView:(LeavesView*)leavesView { 
    return CGPDFDocumentGetNumberOfPages(pdf); 
} 

- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx { 
    CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index + 1); 
    CGAffineTransform transform = aspectFit(CGPDFPageGetBoxRect(page, kCGPDFMediaBox), 
              CGContextGetClipBoundingBox(ctx)); 
    CGContextConcatCTM(ctx, transform); 
    CGContextDrawPDFPage(ctx, page); 
} 


#pragma mark UIViewController 

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    leavesView.backgroundRendering = YES; 
    [self displayPageNumber:1]; 
} 

回答

1

你是如何實例化你的控制器的?

如果調用initWithNibName(我想你做,因爲你說,它有一個筆尖文件),你完全跳過本地init方法(即一個在BookController的);因此,PDF處理根本沒有初始化。

嘗試將你的init方法重命名爲initWithNibName,它應該工作;或者創建一個initWithNibName,並讓它叫你init(谷歌爲「指定構造函數」瞭解更多關於這種模式)。

注意的initWithNibName完整的簽名是:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 

你有更多的選擇,比如通過調用init(而不是initWithNibName)甚至創造一個方法setPDF,那麼,在創建後創建控制器控制器以任何你喜歡的方式,你可以調用這個方法,這反過來調用initialize等...

編輯:如果你決定手動實例化控制器,不要忘記定義loadView

- (void)loadView { 
    [super loadView]; 
    if (leavesView) { 
     leavesView.frame = self.view.bounds; 
     leavesView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 
     [self.view addSubview:leavesView]; 
    } 
} 
+0

謝謝你,我將其更改爲initWithNibName,但不會再改變任何東西,你會請參閱我的編輯的問題,並檢查它 –

+0

有什麼辦法來加載PDF無榫文件?因爲我的應用程序是Universal –

+0

,那麼你需要一個'init'方法(而不是'initWithNibName'),那麼當你需要它的時候顯式地實例化它(從你的應用程序委託?),並將它的視圖添加到它所屬的位置你應用委託給主窗口)。你也需要在你的控制器中實現'loadView'(幾秒鐘後查看我的編輯) – sergio