2010-09-30 9 views
8

Tôi có một Paging UIScrollView với contentSize đủ lớn để giữ một số nhỏ UIScrollViews để thu phóng, viewForZoomingInScrollView là một viewController chứa một CALayer để vẽ một trang PDF lên. Điều này cho phép tôi điều hướng qua PDF giống như trình đọc PDF ibooks.Hiển thị CALayer và Off-Screen

Mã thu hút PDF (Layers lát gạch) tọa lạc tại:

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

Và chỉ đơn giản là thêm một 'trang' cho màn hình hiển thị gọi phương pháp này tự động. Khi tôi thay đổi trang có một số chậm trễ trước khi tất cả các gạch được rút ra, mặc dù đối tượng (trang) đã được tạo ra.

Những gì tôi muốn có thể làm là hiển thị trang tiếp theo trước khi người dùng cuộn đến trang đó, do đó ngăn tác dụng ốp lát hiển thị. Tuy nhiên, tôi đã thấy rằng nếu lớp nằm ngoài màn hình, thêm nó vào scrollview không gọi là drawLayer.

Bất kỳ ý tưởng/gotchas phổ biến ở đây?

Tôi đã thử:

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

NB: Thực tế là điều này được sao chép các iBooks chức năng là không thích hợp trong bối cảnh của các ứng dụng đầy đủ.

Trả lời

7

Như tôi đã đề cập ở trên, CALayers không hiển thị nếu chúng không có màn hình.

tôi đã kết thúc không vẽ PDF trực tiếp đến lớp nhưng thay vào đó, render các trang PDF sang một hình ảnh khi tôi cần thiết (làm cho 1 trang cộng và trừ một trong những trang tập trung)

Dưới đây là đoạn code làm :

-(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

Bạn cần gọi 'UIGraphicsEndImageContext' trước khi trở về. – Jason

+1

cảm ơn vì đã bắt Jason –