2014-03-13 38 views
0

我有一个方法接受一个UIBezierPath作为参数并相应地绘制一个形状。如果我使用纯色填充图形,渲染效果会很好,但如果尝试使其具有Alpha透明色,我首先会收到ARC警告,要求更改代码并使用桥接,然后填充颜色根本不渲染。CAShapeLayer fillColor不呈现

这工作,但不是我想要的:

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

这产生电弧警告“到C指针CGColorRef目标C指针类型的UIColor的隐式转换”。

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形状?

回答

0

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

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]]; 
2

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]; 
+0

虽然你可能是正确的,仍然呈现为我的阿尔法水平在1.0以上的颜色。对于我来说,问题是通过添加'CGColor'来填充color属性来解决的。 – Ryan

+0

如果它有用,你仍然可以upvote我的答案:) – Avt