【发布时间】:2014-03-17 21:03:27
【问题描述】:
我正在开展一个项目,该项目涉及用户与在 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 提示“由于内存压力而终止。”
提前感谢您的想法!
【问题讨论】:
-
你能详细说明为什么你认为核心显卡不适合这个,或者你认为为什么会出现内存问题?
-
为了实时更新线条,当用户拖动手柄时,手势识别器不断导致
setNeedsDisplay被调用。在 Xcodes 的调试导航器中,我可以看到内存使用量激增,然后如果我继续拖动手柄,我会收到内存警告并最终崩溃。 -
如果你想更新 UI 以反映新行,没有别的办法。
-
我可能会误解这一点,但这是否意味着没有办法在 Core Graphics 中创建用户交互行而不导致崩溃?我想做的基本上就像大多数图像编辑软件中的线条工具。如果 Core Graphics 不是做到这一点的最佳方式,您能推荐一个更好的解决方案吗?
-
如果你崩溃了,你应该在你的问题中给出崩溃的细节。这样的 CoreGraphics 不应该只是崩溃。
标签: ios iphone cocoa-touch core-graphics didreceivememorywarning