Note that there are some explanatory texts on larger screens.

plurals
  1. POStop drawing of CATiledLayer
    text
    copied!<p>Is is possible to stop <code>CATiledLayer</code> to draw (drawLayer:inContext)? It draws asynchronously and when i try to release CGPDFDocumentRef, which is used by <code>CATiledLayer</code>, the app crashes (EXC_BAD_ACCESS).</p> <p>That's my view:</p> <pre><code>@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-&gt;pdfPage); self-&gt;pdfPage = CGPDFPageRetain(newPage); //self-&gt;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]; } </code></pre> <p>And this is where i try to stop and release PDF in view controller: <code>v</code> is instance of <code>TiledPDFView</code></p> <pre><code> -(void) stopDwaring { [v stopDrawing]; [v removeFromSuperview]; [v release]; [self.view removeFromSuperview]; self.view = nil; CGPDFDocumentRelease(pdf); } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload