在drawRect中优化动态CGContextDrawLinearGradient

时间:2013-05-24 08:48:55

标签: ios core-graphics

我计算一种新颜色,需要在视图的drawRect方法中以渐变的方式渲染它。

这会占用大量的时间分析器执行时间,并导致drawRect调用被跳过或错过。

在drawRect中优化渐变渲染的最佳方法是什么?

我有以下代码

    CGContextSaveGState(ctx);

    CGContextAddPath(ctx, path.CGPath);
    CGContextClip(ctx);

    // get the color components
    const CGFloat* components = CGColorGetComponents(fillColor.CGColor);

    // create the gradient
    CGGradientRef gradient;
    CGColorSpaceRef colorspace;
    size_t num_locations = 3;

    CGFloat componentsArray[12] =
    {
        components[0], components[1], components[2], 1.0, // Start color
        components[0], components[1], components[2], 1.0, // Middle color
        components[0], components[1], components[2], 0.0  // End color
    };

    colorspace = CGColorSpaceCreateDeviceRGB();
    gradient = CGGradientCreateWithColorComponents(colorspace, componentsArray, locations, num_locations);
    CGContextDrawLinearGradient (ctx, gradient, gradientStartPoint, gradientEndPoint, 0);
    CGGradientRelease(gradient);

    CGContextRestoreGState(ctx);

0 个答案:

没有答案