drawLayer: inContext - Нераспознанный селектор, отправленный в экземпляр

Я пытаюсь создать UIViewController, который рисует слой, и он отлично работает, если этот UIViewController является основным. Однако, если я попытаюсь инициализировать его внутри другого контроллера, а затем добавить его представление в качестве вспомогательного представления представления основного контроллера, это приведет к следующей ошибке:

-[__NSCFType drawLayer:inContext:]: unrecognized selector sent to instance 0x155140

Вот соответствующий код для моего пользовательского UIViewController (PDFPageViewController):

- (void)loadDocument:(PDFDocument *)document
{
    self._document = document;

    CGRect pageRect = CGRectIntegral(CGPDFPageGetBoxRect(self._document.page, kCGPDFCropBox));

    pageRect.origin.x = (self.view.frame.size.width / 2) - (pageRect.size.width / 2) - 35;

    CATiledLayer *tiledLayer = [CATiledLayer layer];
    tiledLayer.delegate = self;
    tiledLayer.tileSize = CGSizeMake(1024.0, 1024.0);
    tiledLayer.levelsOfDetail = 1000;
    tiledLayer.levelsOfDetailBias = 1000;
    tiledLayer.frame = pageRect;

    contentView = [[UIView alloc] initWithFrame:pageRect];
    [contentView.layer addSublayer:tiledLayer];

    CGRect viewFrame = self.view.frame;
    viewFrame.origin = CGPointZero;

    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:viewFrame];
    scrollView.delegate = self;
    scrollView.contentSize = pageRect.size;
    scrollView.maximumZoomScale = 1000;
    [scrollView addSubview:contentView];

    [self.view addSubview:scrollView];   

    NSLog(@"%@", self); // Just checking if there's nothing overwriting the layer's delegate
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return contentView;
}

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if(self._document) {
        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);
        CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(self._document.page, kCGPDFCropBox, layer.bounds, 0, true));
        CGContextDrawPDFPage(ctx, self._document.page);
    }
}

Метод drawLayer присутствует, а делегат CALayer - self .

И вот как я вызываю его на своем основном контроллере:

pageViewController = [[[PDFPageViewController alloc] initWithNibName:NULL bundle:NULL] autorelease];
[pageViewController loadDocument:self.document];

[self.view addSubview:[pageViewController view]];

Я делаю это неправильно? Я не могу понять, почему это работает нормально, если я рисую слой на своем основном контроллере, и это приводит к ошибке, если рисование выполняется в PDFViewController. Метод находится там, делегат - self . Так почему же селектор не работает?

5
задан Raphael 3 July 2011 в 01:17
поделиться