我有UIView
一个drawRect
包含 CoreGraphics 自定义绘图代码的变量大小。视图最初非常小,但有可能变得非常宽,并放置在 aUIScrollView
中以使用户能够滚动视图。
目前,视图被创建为适合整个绘图所需的宽度,CoreGraphics 代码在drawRect
.
- (void)drawRect:(CGRect)rect {
// Only try and draw if the frame size is greater than zero and the graph has some range
if ((self.frame.size.width>0) && (self.frame.size.height>0) && ((maxX - minX)>0)) {
// Get the current drawing context
CGContextRef context = UIGraphicsGetCurrentContext();
// Save the state of the graphics context
CGContextSaveGState(context);
// Set the line style
CGContextSetRGBStrokeColor(context, 0.44, 0.58, 0.77, 1.0);
CGContextSetRGBFillColor(context, 0.44, 0.58, 0.77, 1.0);
CGContextSetLineWidth(context, 3.0);
CGContextSetLineDash(context, 0, NULL, 0);
// Draw the graph
[self drawGraphInContext:context];
// Restore the graphics context
CGContextRestoreGState(context);
}
}
我可以通过以下方式提高效率:
- 使用 rect 参数进行边界计算,
drawRect
并且仅绘制当前可见的内容。 - 创建一个较小的
UIView
(比如 scrollView 框架宽度的 2 倍)并随着滚动位置的移动,重绘图像并将滚动视图重新居中。
在我努力做这些事情之前,我想了解是否值得付出努力,以及如果 UIView 变得非常宽,我以后是否会遇到问题。到目前为止,性能不是问题,但我担心内存可能是问题。
具体来说,scrollView 是否将视图使用的内存量限制在可见区域?是图形上下文创建的整个视图的大小,可见区域还是rect参数的大小?CoreGraphics 是否简单地忽略了可见区域之外的绘图操作?
任何帮助和最佳实践建议将不胜感激。