KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Is is possible to stop CATiledLayer to draw (drawLayer:inContext)? It draws asynchronously and when i try to release CGPDFDocumentRef, which is used by CATiledLayer , the app crashes (EXC_BAD_ACCESS). That's my view: @implementation TiledPDFView - (id)initWithFrame:(CGRect)frame andScale:(CGFloat)scale{ if ((self = [super initWithFrame:frame])) { CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; tiledLayer.levelsOfDetail = 4; tiledLayer.levelsOfDetailBias = 4; tiledLayer.tileSize = CGSizeMake(512.0, 512.0); myScale = scale; } return self; } // Set the layer's class to be CATiledLayer. + (Class)layerClass { return [CATiledLayer class]; } - (void)stopDrawing{ CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; [tiledLayer removeFromSuperlayer]; tiledLayer.delegate = nil; } // Set the CGPDFPageRef for the view. - (void)setPage:(CGPDFPageRef)newPage { CGPDFPageRelease(self->pdfPage); self->pdfPage = CGPDFPageRetain(newPage); //self->pdfPage = newPage; } -(void)drawRect:(CGRect)r { } // Draw the CGPDFPageRef into the layer at the correct scale. -(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)context { // First fill the background with white. CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0); CGContextFillRect(context,self.bounds); CGContextSaveGState(context); // Flip the context so that the PDF page is rendered // right side up. CGContextTranslateCTM(context, 0.0, self.bounds.size.height); CGContextScaleCTM(context, 1.0, -1.0); // Scale the context so that the PDF page is rendered // at the correct size for the zoom level. CGContextScaleCTM(context, myScale,myScale); CGContextDrawPDFPage(context, pdfPage); CGContextRestoreGState(context); } // Clean up. - (void)dealloc { CGPDFPageRelease(pdfPage); [super dealloc]; } </pre
Tags (comma-separated)
Save Edits
Cancel