我的应用程序能够做一些简单的图形绘制(直到我得到一个更稳定的代码,我只坚持一个数字),它也能够重新调整它们的大小。我用来创建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
位于UIView
内。我的问题是当我重新调整我的身材并且我达到大约1000 * 1000的大小(我的“容器”是20,000 * 20,000)时,我开始接收内存警告并且应用程序最终放弃了。所以我的问题是:
1)我应该考虑为UIView
添加最大尺寸吗?
2)我怎样才能使用这些仪器来跟踪这类问题,看看问题出在哪里(或者在哪里进行繁重的工作)。
3)我应该使用像this这样的缓存吗?
4)绘制CALayer
时是否需要考虑一些最佳做法?
5)我应该考虑UIView
,虽然我需要听一听吗?
重新调整{{1}}的大小主要基于this。
答案 0 :(得分:1)
1)如果您使用正确的方法,我认为这个尺寸不是问题。
2)您应该使用Instruments查看关于跟踪内存问题的WWDC视频
3,4)我认为- (void)drawRect:(CGRect)rect
这不是一个好习惯。如果你看一下绘图CALayer
会更好。您可以使用自定义CGMutablePathRef
进行绘图。
所以UIView适合处理触摸但不适合绘制形状。
答案 1 :(得分:1)
你不应该创建这么大的UIView。它太大了。这类问题是CATiledLayer
旨在解决的问题。基本上,您需要跟踪形状的边界框,并使用这些边界框来确定哪些切片与哪些形状相交。当系统要求给定的图块时,则绘制与其相交的所有形状。对于非常大且复杂的形状,您可以通过分割形状进一步优化,但通常不需要这样做。