iPhone: реализовать API Ole Leaves - PullRequest
1 голос
/ 24 ноября 2011

Привет, я недавно работаю с 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];
}

1 Ответ

1 голос
/ 24 ноября 2011

Как вы создаете экземпляр своего контроллера?

Если вы вызываете initWithNibName (как я полагаю, вы делаете, поскольку вы говорите, что у него есть nib-файл), вы полностью пропускаете свой локальный метод init (то есть тот, что в BookController);поэтому обработка PDF вообще не инициализируется.

Попробуйте переименовать ваш метод init в initWithNibName, и он должен работать;или создайте initWithNibName и заставьте его позвонить вам init (Google для "назначенного конструктора", чтобы узнать больше об этом шаблоне).

Обратите внимание, что полная подпись 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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...