我创建了一个自定义进度条,它是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);
}
答案 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);