【发布时间】:2012-10-17 13:32:18
【问题描述】:
我的应用程序能够绘制一些简单的图形(在我获得更稳定的代码之前,我只使用一个图形)并且它还能够重新调整它们的大小。我用来创建UIView 的代码如下:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
[self setContextFillColor:context];
[self setContextStrokeColor:context];
[self setLineWidth:context];
CGFloat lineThickness = [self lineWidth] ;
CGFloat halfLineThickess = lineThickness / 2.0f;
CGContextAddRect(context, CGRectMake(halfLineThickess,halfLineThickess, rect.size.width - lineThickness, rect.size.height - lineThickness));
CGContextDrawPath(context, kCGPathEOFillStroke);
}
这给了我,输入大小为 (100.0f,100.0f),这是:
此数字位于“容器”UIView 内,而后者又位于 UIScrollView 内。我的问题是当我重新调整我的图形大小并且达到大约 1000*1000 的大小(我的“容器”是 20,000*20,000)时,我开始收到内存警告并且应用程序最终放弃了。所以我的问题是:
1) 我应该考虑为UIView 设置一个最大大小吗?
2) 我如何使用这些工具来跟踪此类问题,并查看问题出在哪里(或者在哪里完成了繁重的工作)。
3) 我应该使用像this 这样的缓存吗?
4) 在绘制UIView 时,是否有一些通用的最佳实践需要考虑?
5) 我应该考虑CALayer,尽管我需要听触摸吗?
UIView 的大小调整主要基于this。
【问题讨论】:
-
您是否考虑过使用 QuartzCore 并仅使用视图的 layer 属性来绘制边框?
-
问题是:这是一个简单的数字。最后我会有更复杂的,我不认为玩
UIView的属性就足够了。不过谢谢你的建议。 -
如果您需要绘制较大的内容(可能需要缩放),您可能需要查看
CATiledLayerdeveloper.apple.com/library/ios/#documentation/GraphicsImaging/… -
好吧,这就是我添加它作为评论的原因。我想您可能正在寻找比简单正方形更复杂的形状 :) 祝你好运!
标签: objective-c ios uiview drawrect