【问题标题】:iPhone : Implement Ole Leaves APIiPhone : 实现 Ole Leaves API
【发布时间】:2011-11-24 08:29:00
【问题描述】:

嗨,我最近在使用Leaves 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];
}

【问题讨论】:

    标签: iphone ios xcode ipad sdk


    【解决方案1】:

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

    如果你调用initWithNibName(我想你会这样做,因为你说它有一个 nib 文件),你完全跳过了本地的 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];
        }
    }
    

    【讨论】:

    • 谢谢,我将其更改为 initWithNibName ,但没​​有任何更改,请您查看我编辑的问题并再次检查
    • 有没有办法在没有nib文件的情况下加载pdf?因为我的应用是通用的
    • 好吧,那么您需要一个init 方法(不是initWithNibName),然后在需要时显式实例化它(来自您的应用程序委托?)并将其视图添加到它所属的位置(如果在您的应用程序中委托给主窗口)。您还需要在控制器中实现loadView(几秒钟后查看我的编辑)
    猜你喜欢
    • 2011-11-16
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2011-06-15
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多