带有CAShapeLayer掩码的CAGradientLayer未显示

时间:2014-01-14 18:56:15

标签: ios calayer

我有以下代码:

- (void)setupLayer {
    self.faucetShape = [CAShapeLayer layer];
    self.faucetShape.strokeColor = [[UIColor blackColor] CGColor];
    self.faucetShape.lineWidth = 2;
    self.faucetShape.fillColor = nil;
    self.faucetShape.path = [self faucetPath].CGPath; // faucetPath returns a 4 point diamond shaped UIBezierPath*
    self.faucet = [CAGradientLayer layer];
    self.faucet.mask = self.faucetShape;
    self.faucet.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor redColor].CGColor];
    [self.layer addSublayer: self.faucet];
}

但它没有显示任何内容。不知道我错过了什么(除了我的图片)。

faucetfaucetPath都是属性)

更新

好的,我想CAGradientLayer必须有一个有意义的frame。我认为CAShapeLayer的{​​{1}}没有意义,因为frame可以超出path。添加以下行使其显示:

frame

所以现在我的问题是,有没有办法避免不必这样做?我只是喜欢图层的框架隐含的是包含视图/图层的框架。

1 个答案:

答案 0 :(得分:3)

您需要设置图层的框架。以下代码将绘制一个红色圆圈:

- (void)setupLayer
{
    CAShapeLayer *faucetShape = [CAShapeLayer layer];
    faucetShape.frame = CGRectMake(0, 0, 100, 100);
    faucetShape.strokeColor = [[UIColor blackColor] CGColor];
    faucetShape.lineWidth = 2;
    faucetShape.fillColor = nil;
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddEllipseInRect(path, nil, CGRectMake(0, 0, 100, 100));
    faucetShape.path = path;
    CGPathRelease(path);
    CAGradientLayer *faucet = [CAGradientLayer layer];
    faucet.frame = CGRectMake(10, 10, 100, 100);
    faucet.mask = faucetShape;
    faucet.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor redColor].CGColor];
    [self.view.layer addSublayer: faucet];
}