【发布时间】: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