iOS在视图的一部分绘制渐变

时间:2011-12-28 20:36:52

标签: objective-c ios graphics

我创建了一个自定义进度条,它是UIView的子类并实现了drawRect。我设法在整个视图上绘制一个渐变。然而,我想绘制几个不同的渐变,每个渐变都在不同的位置。如何在我的视图中将CGContextDrawLinearGradient限制为较小的矩形?

glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), 0.0f);`
        CGPoint midCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), currentBounds.size.height);
        CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
        start = start + (values[i] / currentBounds.size.width);
        CGGradientRelease(glossGradient);
    }

2 个答案:

答案 0 :(得分:4)

您可以使用CGContectClipToRect来限制绘图区域

然后对每个渐变执行:

CGContextSaveGState(currentContext);
CGContextClipToRect(theRect); // theRect should be the area where you want to draw the gradient
... // gradient drawing code
CGContextRestoreGState(currentContext);

答案 1 :(得分:3)

Quartz 2D Programming Guide中所述:

  

当您绘制渐变时,Quartz会填充当前上下文。绘画   渐变与使用颜色和图案不同   用于描边和填充路径对象。因此,如果你想   你的渐变出现在一个特定的形状,你需要剪辑   相应的背景。

由于你想在矩形中绘制每个渐变,你需要为每个渐变和矩形做这样的事情:

CGContextSaveGState(currentContext); {
    CGContextClipToRect(currentContext, currentBounds);
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
} CGContextRestoreGState(currentContext);