UIView绘制最佳实践

Rui*_*res 6 objective-c uiview drawrect ios

我的应用程序能够做一些简单的图形绘制(直到我得到一个更稳定的代码,我只坚持一个图),它也能够重新调整它们的大小.我用来创建a的代码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);
}
Run Code Online (Sandbox Code Playgroud)

这给了我,输入大小为(100.0f,100.0f),这个:

在此输入图像描述

这个数字在一个"容器" UIView里面,而"容器" 又在里面UIScrollView.我的问题是当我重新调整我的身材并且我达到大约1000*1000的大小(我的"容器"是20,000*20,000)时,我开始接收内存警告并且应用程序最终放弃了.所以我的问题是:

1)我应该考虑为此设置最大尺寸UIView吗?

2)我怎样才能使用仪器来跟踪这类问题,看看问题出在哪里(或者在哪里进行繁重的工作).

3)我应该使用某种像缓存这样

4)在绘制时,是否有一些一般的最佳实践需要考虑UIView

5)我应该考虑一下CALayer,虽然我需要听一听吗?

重新调整大小UIView主要基于.

Rob*_*ier 1

您不应该创建这么大的 UIView。它太大了。此类问题正是CATiledLayer旨在解决的。基本上,您需要跟踪形状的边界框,并使用这些边界框来确定哪些图块与哪些形状相交。当系统要求给定图块时,您将绘制与其相交的所有形状。对于非常大且复杂的形状,您可以通过分割形状来进一步优化,但通常不需要这样做。