绘制大型CGPath的最有效方法是什么?

时间:2009-07-20 21:45:38

标签: iphone cocoa-touch quartz-graphics

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

所以我的问题是:效率这么高吗?

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

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

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

向这个方向移动是否值得,或者CGPath已经相对快速地绘制了?

1 个答案:

答案 0 :(得分:3)

必要时,Quartz必须将它绘制的所有内容与它所绘制的CGContext的尺寸相关联。但是,如果您只发送在该图块中可见的几何图形,它仍将保存CPU。如果你通过准备多个路径来实现这一点,每个瓷砖一个,你就是在谈论做一次剪裁(当你创建多​​个路径时),而每次绘制瓷砖时石英都会这样做。效率的提升将取决于你的道路有多复杂:如果它是一些简单的形状,没什么大不了的;如果它是国家公路网的矢量绘制地图,它可能是巨大的!当然,您必须将此加速交易与代码的复杂性进行交换。

你可以做的就是使用乐器来看看在你疯狂优化之前在Quartz花了多少时间。