【问题标题】:CALayer: Single pixel line looks like 2 pixelsCALayer:单像素线看起来像2个像素
【发布时间】:2013-02-26 18:37:41
【问题描述】:

这是我的代码:

int columns 3;
int columnWidth = self.layer.bounds.size.width / 3;

for (int c = 1; c < columns; c++) {
    CALayer *layer  = [CALayer layer];
    layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 1, self.layer.bounds.size.height));
    layer.backgroundColor = myColor;
    [grid addSublayer:layer];
}

我知道我必须将 x 和 y 移动 0.5 像素,这就是我所做的,但它仍然显示为 2 像素线而不是 1。

【问题讨论】:

  • 请记住,在 Retina 设备上,1 点 = 2 像素。
  • @H2CO3 - 我不在视网膜上,但请记住这一点。如何区分两者?有常数吗?我想也许 cocoa 会自动完成所有的翻译。但这是另一个主题。
  • 你在哪里画线?我只看到一个宽度设置为奇怪值 1 的矩形 (layer.frame)。
  • @AlexWien - 这是一个正在绘制的单像素矩形 = 一条线。有没有更好的方法来画一条简单的线?
  • @Wesley [[UIScreen mainScren] scale]

标签: objective-c cocoa core-animation core-graphics


【解决方案1】:

我继续做了一张说明图,以防对任何人有帮助

精确像素坐标上的下线看起来很模糊...线宽的每一半位于不同的像素行中...

上面的线偏移了line_width/2.0,看起来很清晰……它完全位于一行像素内。

【讨论】:

  • 感谢您的有力解释!
【解决方案2】:

将图层Frame设置为

layer.frame = (CGRectMake(columnWidth * c + 0.5, 0.5, 0.5, self.layer.bounds.size.height));

是的,它也适用于视网膜

检查这个post Section 1 Point Lines and Pixel Boundaries。那里解释得很好

【讨论】:

  • 我不喜欢链接中的解释,所以我创建了一个说明原理的插图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多