我正在开发一个项目,该项目涉及用户在UIImage之上与Core Graphics中呈现的直线进行交互。该行的每一端都有一个“句柄”供用户与之交互。拖动时,调用setNeedsDisplay
并重新绘制线条,因为长度和角度会发生变化。
我正在使用以下代码重绘该行。这很简单,但我开始认为Core Graphics可能不是正确的方法。
以下内容由drawRect
调用:
- (void)drawLines {
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextBeginPath(ctx);
CGContextSetStrokeColorWithColor(ctx, [[UIColor blueColor] CGColor]);
CGContextSetLineWidth(ctx, 6.0);
CGContextSetAlpha(ctx, 1.0);
CGContextMoveToPoint(ctx, pointA.x, pointA.y);
CGContextAddLineToPoint(ctx, pointB.x, pointB.y);
CGContextStrokePath(ctx);
CGContextRestoreGState(ctx);
}
编辑: 我面临的问题是,当我快速拖动此项目时,内存使用量会激增,我会收到内存警告,然后崩溃。 Xcode说“因内存压力而终止。”
提前感谢您的想法!
答案 0 :(得分:0)
解决。 UIView的大小太大了。在如此巨大的UIView上调用setNeedsDisplay
将导致内存峰值和崩溃。 Apple过去常常将UIView限制为1024x1024。虽然这不再是限制,但他们仍然建议保持较小的尺寸,以减少内存占用。