【问题标题】:What's the most efficient way to draw a large CGPath?绘制大型 CGPath 的最有效方法是什么?
【发布时间】:2009-07-20 21:45:38
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: iphone cocoa-touch quartz-graphics


    【解决方案1】:

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

    您可以做的是使用工具来查看在 Quartz 中花费了多少时间,然后再疯狂地优化东西。

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2012-01-10
      相关资源
      最近更新 更多