【问题标题】:Why does my CGContext-drawn circle suck?为什么我的 CGContext 绘制的圆圈很糟糕?
【发布时间】:2010-11-30 15:42:18
【问题描述】:

我有一个自定义表格视图单元格,旨在像 iPhone 的 Mail.app 一样绘制一个圆圈:

相反,它是这样绘制的:

这是我的代码:

CGContextRef context = UIGraphicsGetCurrentContext();
UIColor *grayColor = [UIColor grayColor];

[grayColor set];

CGContextStrokeEllipseInRect(context, CGRectMake(9, 10, 23, 23));

我怎样才能让它不烂? :)

编辑:忽略我省略了绘制白色背景颜色的代码这一事实。

它糟透了怎么办?它看起来不像 Mail 中的圆圈,如果不完全一样的话。

【问题讨论】:

  • 这有什么不好的?抗锯齿/渲染?宽度/颜色?一些细节将帮助您获得更好的答案。
  • 已编辑以说明为什么它很糟糕,尽管我认为这从图像中是不言而喻的。
  • 你的图片没有提前加载,abrahamvegh。但他们现在。

标签: iphone objective-c core-graphics cgcontext


【解决方案1】:

我可以通过将 UIColor 更改为 Apple 使用的相同颜色 #E5E5E5 来解决此问题:

[UIColor colorWithRed: 0.8980392157 green: 0.8980392157 blue: 0.8980392157 alpha: 1.0]

并将线宽从默认的1.0 更改为2.0:

CGContextSetLineWidth(context, 2.0);

调整大小也是必要的:

CGContextStrokeEllipseInRect(context, CGRectMake(10, 11, 21, 21));

最终代码如下所示:

CGContextRef context = UIGraphicsGetCurrentContext();
UIColor *grayColor = [UIColor colorWithRed: 0.8980392157 green: 0.8980392157 blue: 0.8980392157 alpha: 1.0];

[grayColor set];

CGContextSetLineWidth(context, 2.0);
CGContextStrokeEllipseInRect(context, CGRectMake(10, 11, 21, 21));

输出如下:

【讨论】:

  • 您的回答让我想起了 C 的十六进制浮点文字,并启发了我去尝试。您可以将颜色分量值表示为,例如,0xE5p+0 / 0xFFp+0。
【解决方案2】:

尝试将其 alpha 设置为 0.5 并使边框变粗,例如,像这样:

CGContextSetAlpha(context, 0.5);

【讨论】:

  • 而且看起来小一点 - 与另一个圆圈完全匹配。
  • 将 alpha 设置为 0.5 确实可以改善颜色情况,但我可能会通过获取该特定灰色阴影的实际 UIColor 表示来改善这种情况,以降低计算工作量。我用什么 CG 调用来使边框变粗?
  • 使用 CGContextSetLineWidth(CGContextRef c, CGFloat width);
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多