[ios]iPhone︰ 实现 Ole 叶 API

标签: Xcode iphone ios
发布时间: 2017/3/28 23:25:04
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

嗨最近工作与的 api 和我有这问题,我需要显示 PDF 文件,和我 ViewController 班有一个 nib 文件,执行代码库关于 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 (当我想你知道,你说它以来 nib 文件),你完全跳过您当地 init 方法 (即,一个在创建应用程序模板); 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];
    }
}
官方微信
官方QQ群
31647020