drawRect: / renderInContext: problemy

Wydaje się, że mam trochę problemów, próbując narysować mój pogląd na kontekst.

Moja podstawowa konfiguracja to kontroler widoku, który jest właścicielemUIPageViewController w którym ładuję kontrolery z widokami, które mogą być narysowane przez palec użytkownika. Zasadniczo mam książkę, którą można narysować.

Gdy strona zostanie odwrócona w książce, zapisuję obraz dzwoniąc

<code>- (UIImage *)wholeImage {
    // Render the layer into an image and return
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *wholePageImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return wholePageImage;
}
</code>

Zwracana wartość tego zostaje następnie zapisana w pliku. Jednak gdy wywołam tę metodę składowania, to linia

<code>[self.layer renderInContext:UIGraphicsGetCurrentContext()];
</code>

zostaje trafiony, co wydaje się dzwonić do mojegodrawRect: metoda, która jest nadpisywana w następujący sposób

<code>- (void)drawRect:(CGRect)rect {
    // Draw the current state of the image
    [self.currentImage drawAtPoint:CGPointMake(0.0f, 0.0f)];
    CGPoint midPoint1 = [self midPointOfPoint1:previousPoint1 point2:previousPoint2];
    CGPoint midPoint2 = [self midPointOfPoint1:currentPoint point2:previousPoint1];

    // Get the context
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    // Add the new bit of line to the image
    [self.layer renderInContext:context];
    CGContextMoveToPoint(context, midPoint1.x, midPoint1.y);
    CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, midPoint2.x, midPoint2.y); 
    CGContextSetLineCap(context, kCGLineCapRound);
    CGContextSetLineWidth(context, self.lineWidth);
    if (self.drawMode == LNDrawViewDrawModeTipex) CGContextSetBlendMode(context, kCGBlendModeClear);
    else CGContextSetBlendMode(context, kCGBlendModeCopy);
    CGContextSetStrokeColorWithColor(context, self.lineColour.CGColor);
    CGContextStrokePath(context);

    // Call super
    [super drawRect:rect];
}
</code>

co ma sens, ale wydaje się, że jest wywoływane rekurencyjnie, aż w końcu otrzymam EXC_BAD_ACCESS w tej linii

<code>[self.currentImage drawAtPoint:CGPointMake(0.0f, 0.0f)];
</code>

Jestem w całkowitej stracie co do tego, co to powoduje i doprowadza mnie do szału.

Jeśli to pomoże, mój stos wywołań zaczyna się tak

a następnie przechodzi rekurencyjnie, aż w końcu się skończy

Naprawdę doceniłbym i pomoc i wgląd, że każdy może dać !!

EDYCJA: (Dodano dotknięte przeniesione)

<code>-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // Get the touch
    UITouch *touch = [touches anyObject];

    // Get the points
    previousPoint2 = previousPoint1;
    previousPoint1 = [touch previousLocationInView:self];
    currentPoint = [touch locationInView:self];

    // Calculate mid point
    CGPoint mid1 = [self midPointOfPoint1:previousPoint1 point2:previousPoint2]; 
    CGPoint mid2 = [self midPointOfPoint1:currentPoint point2:previousPoint1];

    // Create a path for the last few points
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
    CGPathAddQuadCurveToPoint(path, NULL, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
    CGRect pathBounds = CGPathGetBoundingBox(path);
    CGPathRelease(path);

    // Take account of line width
    pathBounds.origin.x -= self.lineWidth * 2.0f;
    pathBounds.origin.y -= self.lineWidth * 2.0f;
    pathBounds.size.width += self.lineWidth * 4.0f;
    pathBounds.size.height += self.lineWidth * 4.0f;

    UIGraphicsBeginImageContext(pathBounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    self.currentImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self setNeedsDisplayInRect:pathBounds];    
</code>

}

questionAnswers(1)

yourAnswerToTheQuestion