我想使用ACEDrawing实现快进功能。我正在做的是当用户绘制任何绘图时,我记录了用于绘制线条的所有点。因此,在用户完成绘图后,我将获得使用绘制线的所有点。所以我想开发快进功能,用户可以点击一个按钮查看最终的绘图。我已经实现了如下所示的代码。它适用于小型绘图,例如2000点。但当点数增加到1000000以上时就崩溃了。我不知道它是如何处理的。任何好友都能对此提出建议吗?
代码:
self.currentTool = ACEDrawingToolTypePen;
self.currentTool.lineWidth = self.lineWidth;
self.currentTool.lineColor = [UIColor blackColor];
self.currentTool.lineAlpha = 1;
[self.currentTool setInitialPoint:currentPoint];
[self.pathArray addObject:self.currentTool];
currentPointArray = [mainDictionary objectForKey:@"points"];
for (int j = 2; j<[currentPointArray count]; j++) {
currentPoint = CGPointMake([[[currentPointArray objectAtIndex:j] objectForKey:@"x"] floatValue]*widMul, [[[currentPointArray objectAtIndex:j] objectForKey:@"y"] floatValue]*heiMul);
previousPoint2 = CGPointMake([[[currentPointArray objectAtIndex:j-2] objectForKey:@"x"] floatValue]*widMul, [[[currentPointArray objectAtIndex:j-2] objectForKey:@"y"] floatValue]*heiMul);
previousPoint1 = CGPointMake([[[currentPointArray objectAtIndex:j-1] objectForKey:@"x"] floatValue]*widMul, [[[currentPointArray objectAtIndex:j-1] objectForKey:@"y"] floatValue]*heiMul);
if ([self.currentTool isKindOfClass:[ACEDrawingPenTool class]]) {
CGRect bounds = [(ACEDrawingPenTool*)self.currentTool addPathPreviousPreviousPoint:previousPoint2 withPreviousPoint:previousPoint1 withCurrentPoint:currentPoint];
CGRect drawBox = bounds;
drawBox.origin.x -= self.lineWidth * 1.0;
drawBox.size.width += self.lineWidth * 2.0;
drawBox.size.height += self.lineWidth * 2.0;
[self setNeedsDisplayInRect:drawBox];
}
[self updateCacheImage:NO];
}
答案 0 :(得分:0)
好像你有记忆问题。
您可以按如下方式更改代码。
在updateCacheImage
方法中,您需要将imageContext
放入AutoReleaspool
以释放记忆。
@autoreleasepool {
// init a context
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0);
//End Context
UIGraphicsEndImageContext();
}
您还必须将对象设置为nil
以释放内存,如下所示:
id object;
object = nil;