2010-09-10 2 views
0

я пытаюсь отменить myContext из сохранения состояния затем после того, как я рисую линию я называю отменить метод, чтобы восстановить свой контекст предыдущего, но сообщить об ошибкеошибка при попытке отменить Context

<Error>: CGContextRestoreGState: invalid context 

код

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.view]; 
    UIGraphicsBeginImageContext(self.view.frame.size); 
    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextSetLineCap(context, kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); 
    CGContextBeginPath(UIGraphicsGetCurrentContext()); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext();  
} 

- (void)undo { 
    CGContextRestoreGState(context); 
} 

ответ

2

Из того, что я прочитал от вас, я предполагаю, что вы пытаетесь осуществить отмену, правильно? CGContextSaveGState и CGContextRestoreGState не имеют никакого отношения к этому.

Эти два метода хранят только метаданные контекста в контексте. Метаданные, такие как текущий цвет чертежа, преобразование координатной системы, толщина линии и т. Д. Этот GState, который вы сохраняете с помощью этих методов, позволяет отменить настройки контекста, а не его содержимое. Вам нужно отменить другой способ ...

Это также относится к контексту после его долгого уничтожения. Как только вы вызываете UIGraphicsEndImageContext();, контекст, который вы ранее сохраняли в переменной context, исчез. И вот почему ошибка печатается.

Чтобы отменить, вам, вероятно, придется сохранить созданное изображение или действия, которые пользователь сделал или что-то еще. CGContexts вам не помогут ...

+0

Поблагодарите Max Seelemann, вы даете мне понять ясно! – RAGOpoR