Я работаю над графическим приложением. Я пытаюсь реализовать возможность отмены / повтора, поэтому я сообщаю отменить просмотр приложения представлению, чтобы сохранить текущее изображение перед обновлением дисплея. Это работает отлично (да, я понимаю, что перерисовка / сохранение всего представления не невероятно эффективно, но для решения этой проблемы, прежде чем пытаться оптимизировать код). Однако, как и ожидалось, когда я «отменяю» или «повторяю», отражается только незначительное изменение. Моя цель - отменить / переделать весь ход пальца. Для этого я сказал undoManager [beginUndoGrouping] в методе [touchesBegan] и [endUndoGrouping] в [touchesEnded]. Это работает немного, но после рисования нескольких штрихов приложение вылетает, и GDB завершается с exc_bad_access. согласно сообщениям о сбое, это связано с нехваткой памяти
Я очень благодарен за любые идеи, которые вы мне можете дать.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
mouseDragged = YES;
currentPoint = [[touches anyObject] locationInView:self];
UIGraphicsBeginImageContext(drawingImageView.bounds.size);
[drawingImageView.image drawInRect:drawingImageView.bounds];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextSetLineWidth(ctx, drawingWidth);
[drawingColor setStroke];
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, previousPoint.x, previousPoint.y);
CGContextAddLineToPoint(ctx, currentPoint.x, currentPoint.y);
CGContextStrokePath(ctx);
[self.undoManager registerUndoWithTarget:drawingImageView selector:@selector(setImage:) object:drawingImageView.image];
drawingImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
previousPoint = currentPoint;
}