iOS - 核心图形适用于颜色,但不适用于黑色,白色,灰色

 123sdf87_768 发布于 2023-01-09 12:13

我正在使用以下类绘制一个简单的描边圆:

 @implementation StrokedCircle

 - (id)initWithRadius:(CGFloat)radius strokeWidth:(CGFloat)strokeWidth strokeColor:(UIColor *)strokeColor
 {
     self = [super initWithRadius:radius];
     if (self)
     {
         _strokeWidth = strokeWidth;
         _strokeColor  = strokeColor;
     }
     return self;
 }


 - (void)drawRect:(CGRect)rect
 {
     NSLog(@"Drawing with color %@ and stroke width %f", self.strokeColor, self.strokeWidth);

     CGContextRef context = UIGraphicsGetCurrentContext();
     CGRect circleRect = CGRectInset(rect, self.strokeWidth, self.strokeWidth);
     CGContextAddEllipseInRect(context, circleRect);
     CGContextSetLineWidth(context, self.strokeWidth);
     CGContextSetStrokeColor(context, CGColorGetComponents([self.strokeColor CGColor]));
     CGContextStrokePath(context);
 }

 @end

注意:超类是一个简单的圆(子类UIView),其中包含一个radius属性,并且视图的backgroundcolor设置为clearColor.

在视图控制器中,我添加以下代码viewDidLoad:

 - (void)viewDidLoad
 {
     [super viewDidLoad];
     StrokedCircle *strokedCircle = [[StrokedCircle alloc] initWithRadius:50.0 strokeWidth:1.0 strokeColor:[UIColor blueColor]];
     strokedCircle.center = self.view.center;
     [self.view addSubview:strokedCircle];
 }

这实际上工作正常,控制台输出: 2014-06-14 10:31:58.270 ShapeTester[1445:60b] Drawing with color UIDeviceRGBColorSpace 0 0 1 1 and stroke width 1.000000并在屏幕中间显示一个蓝色圆圈.

蓝色抚摸着圆圈

然而,当我修改的颜色[UIUColor blackColor],[UIColor grayColor][UIColor whiteColor](但随后又改变视图的backgroundColor),无圆示出任何更多.

有谁知道这种行为的原因是什么?核心图形不会绘制灰度颜色吗?我阅读了核心图形编程指南中的相应部分,但那里没有提到这样的内容.

1 个回答
  • 黑色,白色和灰色(由您命名的方法返回)不在RGB颜色空间中.它们处于灰度色彩空间.灰度颜色空间只有一个组件(加上alpha),而不是三个(加上alpha).因此,您只设置笔触颜色的一个组件,而其他两个组件未定义.由于这个问题,你可能最终将alpha设置为零,所以你什么也得不到.

    不要用CGContextSetStrokeColor.它需要您担心颜色空间(您需要使用它设置CGContextSetStrokeColorSpace).而是使用CGContextSetStrokeColorWithColor,它设置颜色空间和颜色组件:

    CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
    

    2023-01-09 12:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有