【问题标题】:Core Graphics CGPathRef drawn at a specified pointCore Graphics CGPathRef 在指定点绘制
【发布时间】:2012-06-30 02:26:41
【问题描述】:

我有一个路径“调色板”,我会画很多次;可能有 100 个。

我想在这样的指定位置绘制这些:

CGPathRef foo = ...
CGPathRef bar = ...
// do this dozens of times at differing points
[self draw:context path:foo atX:100 andY:50];
[self draw:context path:bar atX:200 andY:50];

我现在正在做的是翻译。它有效,但我不确定这是性能最高的解决方案。像这样的:

- (CGRect) draw:(CGContextRef) context path:(CGPathRef) path atX:(CGFloat) x andY:   (CGFloat)y
{
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, x, y);
    CGRect pathBoundingRect = CGPathGetBoundingBox(path);
    CGContextSetFillColorWithColor(context, drawColor);
    CGContextAddPath(context, path);
    CGContextDrawPath(context, kCGPathFill);
    CGContextRestoreGState(context);
    return pathBoundingRect;
}

您有什么改进建议吗?

【问题讨论】:

    标签: ios macos core-graphics


    【解决方案1】:

    如果它们移动,在其自己的 UIView 中绘制每一个可能会快得多(所以一开始,它们都是相同的),然后定位视图本身。

    这样,(视图的)转换将自动在 GPU 而不是 CPU 上完成,并且 drawRect: 只需为每个路径对象调用一次。

    【讨论】:

    • 感谢 fzwo。有趣的想法;创建绘制路径的视图并将视图作为子视图添加到“画布”视图。路径不会移动,但我会尝试并比较结果与单视图版本。我没有尝试这样做,因为我认为 - 没有证据 - 子视图方法的性能会降低。
    • UIKit 在某些方面表现相当出色。顺便说一句,您是否衡量过您确实存在性能问题?
    猜你喜欢
    • 2010-09-23
    • 2011-01-23
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多