1

好吧,我有一个UIView显示CGPath相当宽的。它可以UIScrollView水平滚动。现在,我使用 a 来查看视图CATiledLayer,因为它的宽度超过 1024 像素。

所以我的问题是:这有效吗?

- (void) drawRect:(CGRect)rect {
    CGContextRef g = UIGraphicsGetCurrentContext();
    CGContextAddPath(g,path);
    CGContextSetStrokeColor(g,color);
    CGContextDrawPath(g,kCGPathStroke);
}

本质上,每次绘制图层中的图块时,我都会绘制整个路径。有谁知道这是否是一个坏主意,或者 CGContext 是否相对聪明地只绘制剪切矩形内的路径部分?

路径主要是这样设置的,我可以将它分成大小和形状与瓷砖相似的块,但它需要我做更多的工作,需要在路径之间有一些冗余(对于形状跨越瓷砖边界),并且还需要一些计算来找到要绘制的路径。

朝这个方向发展是否值得,还是 CGPath 已经相对较快地绘制?

4

1 回答 1

3

Quartz 必须根据它所绘制的 CGContext 的尺寸来裁剪它绘制的所有内容。但是,如果您只向它发送在该图块中可见的几何图形,它仍然会节省 CPU。如果你通过准备多条路径来做到这一点,每个瓦片一个,你说的是一次剪裁(当你创建多​​条路径时),而 Quartz 每次绘制瓦片时都做一次。效率增益将归结为您的路径有多复杂:如果是一些简单的形状,没什么大不了的;如果它是一张矢量绘制的全国公路网地图,它可能是巨大的!当然,您必须权衡这种加速与增加的代码复杂性。

你可以做的是使用工具来查看在你疯狂优化东西之前在 Quartz 上花费了多少时间。

于 2009-07-20T23:10:20.610 回答