0

我有以下代码:

-(void)drawRect:(CGRect)rect
{

    // gradient background
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = rect;
    gradient.colors = [NSArray arrayWithObjects:(id) backgroundGradientTop.CGColor, (id) backgroundGradientBottom.CGColor, nil];
    gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];

    [self.layer insertSublayer:gradient atIndex:0];



    // line on top
    [[UIColor redColor] set];

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(currentContext, 5.0f);

    CGContextMoveToPoint(currentContext, 0, 10.0f);

    CGContextAddLineToPoint(currentContext, rect.size.width, 10.0f);

    CGContextStrokePath(currentContext);


}

我试图在渐变顶部绘制的线从未显示。如果我注释掉渐变层,它就在那里。有没有办法在顶部绘制渐变背景和一条线(或几条线)?也许我不应该混合 calayer 和 CG?

4

1 回答 1

0

我试图在渐变顶部绘制的线从未显示。如果我注释掉渐变层,它就在那里。

这是因为子图层出现在其父图层之上。您的渐变显然是不透明的,并且与您的视图大小相同,因此它覆盖了视图。

您不能以这种方式混合 CA 和 CG 绘图。如果您使用 绘制渐变效果会更好CGContextDrawLinearGradient

于 2012-06-13T04:15:05.163 回答