【问题标题】:CAShapeLayer fillColor not renderingCAShapeLayer fillColor 不渲染
【发布时间】:2023-06-23 21:48:01
【问题描述】:

我有一个接受 UIBezierPath 作为参数并相应地绘制形状的方法。如果我用纯色填充形状,它会渲染得很好,但是如果我尝试用 alpha 使它成为颜色,我首先会收到一个 ARC 警告,要求更改代码并使用桥接,然后填充颜色根本不会渲染。

这可行,但不是我想要的:

standShapeLayer.fillColor = [[UIColor redColor] CGColor];

这会生成一个 ARC 警告“Objective C 指针类型 UIColor 到 C 指针 CGColorRef 的隐式转换”。

standShapeLayer.fillColor = [UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f];

这会运行,但没有对形状应用填充颜色:

standShapeLayer.fillColor = (__bridge CGColorRef)([UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f]);

这是该方法的完整代码:

-(void)drawShape:(UIBezierPath *)standShape {

    [standShapeLayer removeFromSuperlayer];
    selectedStand = standShape;
    standShapeLayer = [CAShapeLayer layer];
    standShapeLayer.path = standShape.CGPath;
    standShapeLayer.fillColor = (__bridge CGColorRef)([UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f]);
    NSLog(@"color = %@", standShapeLayer.fillColor); // This logs the correct colour which is not rendered.
    // standShapeLayer.fillColor = [[UIColor redColor] CGColor]; << This works but is not what I need.
    standShapeLayer.strokeColor = [[UIColor redColor] CGColor];
    standShapeLayer.lineWidth = 2;
    [_imageView.layer addSublayer:standShapeLayer];

}

我需要做什么才能让带有 alpha 的颜色填充 CAShapeLayer 形状?

【问题讨论】:

    标签: ios objective-c cocoa-touch cashapelayer


    【解决方案1】:

    您的alpha 不正确。

    alpha - 颜色对象的不透明度值,指定为一个值 从 0.0 到 1.0。

    尝试改变

    standShapeLayer.fillColor = (__bridge CGColorRef)([UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f]);
    

    standShapeLayer.fillColor = [[UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:0.7f] CGColor];
    

    【讨论】:

    • 虽然您可能是对的,但颜色仍然为我呈现,alpha 级别高于 1.0。通过在 fillColor 属性中添加 'CGColor' 解决了我的问题。
    【解决方案2】:

    虽然我写的东西我认为是正确的,但显然不是。

    standShapeLayer.fillColor = [UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f];
    

    应该是:

    [standShapeLayer setFillColor:[[UIColor colorWithRed:0.2 green:0.66 blue:0.86 alpha:2.0f] CGColor]];
    

    【讨论】: