저는 베어 본 드로잉 앱을 만들고 있습니다. 실행 취소/다시 실행 기능을 구현하려고 시도하므로 표시를 업데이트하기 전에 현재 이미지를 저장하도록 뷰의 undoManager에 알립니다. 이것은 완벽하게 작동합니다 (예, 전체보기 다시 그리기/저장이 매우 효율적이지는 않지만 코드 최적화를 시도하기 전에이 문제를 해결할 수 있음을 알고 있습니다). 그러나 예상대로 '실행 취소'또는 '다시 실행'을 수행하면 미세한 변경 사항 만 반영됩니다. 내 목표는 전체 손가락 스트로크를 실행 취소하거나 다시 실행하는 것입니다. 그렇게하기 위해 undoManager에 [touchesBegan] 메소드의 [beginUndoGrouping] 및 [touchesEnded]의 [endUndoGrouping]에 대해 설명했습니다. 그건 조금은 효과가 있지만 몇 스트로크를 그린 후에 앱이 충돌하고 gdb가 exc_bad_access로 종료됩니다. 오류보고에 따르면, 메모리 부족으로 인한 것입니다.NSUndoManager 그룹화 문제가 있습니까?
저에게 제공 할 수있는 통찰력에 대해 매우 감사드립니다.
- (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;
} 당신이 저장하고 이미지로 전체보기를로드하는 문제를 해결하고 싶지 않을 수도 있지만