Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-Core图形可以使用颜色,但不能使用黑色、白色和灰色_Ios_Objective C_Core Graphics_Drawrect_Cgcontext - Fatal编程技术网

iOS-Core图形可以使用颜色,但不能使用黑色、白色和灰色

iOS-Core图形可以使用颜色,但不能使用黑色、白色和灰色,ios,objective-c,core-graphics,drawrect,cgcontext,Ios,Objective C,Core Graphics,Drawrect,Cgcontext,我正在使用以下类绘制一个简单的笔划圆: @implementation StrokedCircle - (id)initWithRadius:(CGFloat)radius strokeWidth:(CGFloat)strokeWidth strokeColor:(UIColor *)strokeColor { self = [super initWithRadius:radius]; if (self) { _strokeWidth =

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

 @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
属性,其中视图的背景色设置为
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-0614:10:31:58.270 SopeTeTe[1445:60B]绘制颜色为uiDeffigBrClice空间0×0 1 1和笔划宽度1 000000 和蓝色圆圈显示在屏幕中部。

但是,当我将颜色修改为
[UIUColor blackColor]
[UIColor grayColor]
[UIColor whiteColor]
(但同时更改视图的
背景色
)时,将不再显示任何圆圈

有人知道这种行为的原因吗?核心图形不绘制灰度颜色吗?我通读了文章中的相应章节,但没有提到类似的内容

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

不要使用
CGContextSetStrokeColor
。它要求您担心颜色空间(需要使用
CGContextSetStrokeColorSpace
设置颜色空间)。相反,请使用
CGContextSetStrokeColorWithColor
,这将设置颜色空间和颜色组件:

CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
黑色、白色和灰色(由您命名的方法返回)不在RGB颜色空间中。它们在灰度颜色空间中。灰度颜色空间只有一个分量(加上alpha),而不是三个分量(加上alpha)。因此,您只设置笔划颜色的一个组件,而其他两个组件未定义。由于这个问题,您可能最终将alpha设置为零,所以您什么也得不到

不要使用
CGContextSetStrokeColor
。它要求您担心颜色空间(需要使用
CGContextSetStrokeColorSpace
设置颜色空间)。相反,请使用
CGContextSetStrokeColorWithColor
,这将设置颜色空间和颜色组件:

CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);