2010-09-30 2 views
8

У меня есть пейджинг UIScrollView с contentSize достаточно большим, чтобы содержать несколько небольших UIScrollViews для масштабирования. viewForZoomingInScrollView - это viewController, который содержит CALayer для рисования страницы PDF. Это позволяет мне перемещаться по PDF-файлу так же, как читатель PDF ibooks.CALayer и Off-Screen Rendering

Код, который рисует PDF (Плиточные Слои) расположен в:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 

И просто добавить «страницу» в видимом экране автоматически вызывает этот метод. Когда я меняю страницу, есть некоторая задержка, прежде чем все фрагменты будут нарисованы, даже если объект (страница) уже создан.

Что я хочу сделать, это отобразить следующую страницу до того, как пользователь прокрутится к ней, тем самым предотвращая видимый эффект черепицы. Тем не менее, я обнаружил, что если слой находится вне экрана, добавив его в scrollview, он не вызывает drawLayer.

Любые идеи/общие проблемы здесь?

Я пробовал:

[viewController.view.layer setNeedsLayout]; 
[viewController.view.layer setNeedsDisplay]; 

NB: Дело в том, что это тиражирование функционально интерактивные книги не имеет никакого значения в контексте полного приложения.

ответ

7

Как я уже упоминал выше, CALayers не отображают, если они находятся вне экрана.

Я в конечном итоге не рисовать PDF непосредственно в слой, но вместо этого, оказывается страницу PDF к изображению, когда мне нужно (делает 1 страница плюс и минус один сфокусированного страницы)

Вот рендер код :

-(UIImage *)renderPDFPageToImage:(int)pageNumber//NSOPERATION? 
{ 
//you may not want to permanently (app life) retain doc ref 

CGSize size = CGSizeMake(x,y);  
UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextTranslateCTM(context, 0, 750); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGPDFPageRef page; //Move to class member 

    page = CGPDFDocumentGetPage (myDocumentRef, pageNumber); 
    CGContextDrawPDFPage (context, page); 

UIImage * pdfImage = UIGraphicsGetImageFromCurrentImageContext();//autoreleased 
UIGraphicsEndImageContext(); 
return pdfImage; 

} 
+2

Перед возвратом необходимо вызвать 'UIGraphicsEndImageContext'. – Jason

+1

спасибо за уловку Джейсона –

 Смежные вопросы

  • Нет связанных вопросов^_^