核心图形行程宽度在行与行之间不一致弧?

时间:2010-12-17 18:45:50

标签: macos ios core-graphics

用例:我正在继承UIView来创建一个自定义视图,该视图使用圆角矩形“遮罩”UIImage(将图像剪切为圆角矩形)。代码正在运行;我使用了类似于this question的方法。

但是,我想要剪切剪切路径以创建“框架”。这是有效的,但弧形笔划看起来与线条笔划明显不同。我已经尝试将笔划宽度调整为更大的值(我认为它最初是像素化),但抗锯齿似乎以不同的方式处理弧和线。

这是我在模拟器上看到的内容:

Uneven stroke image

这是绘制它的代码:

CGContextSetRGBStrokeColor(context, 0, 0, 0, STROKE_OPACITY);
CGContextSetLineWidth(context, 2.0f);
CGContextAddPath(context, roundRectPath);
CGContextStrokePath(context);

任何人都知道如何顺利​​排队吗?

2 个答案:

答案 0 :(得分:12)

  

...但是抗锯齿似乎以不同的方式处理弧和线。

不,它没有。

你的笔画宽度是一致的 - 它一直是2磅。

错误的是你已经剪裁成一个矩形,你的形状的两侧正好在这个矩形的边缘上,所以只有矩形内侧的两半被绘制出来。这就是为什么边缘只出现1 px宽。

解决方案要么不剪辑,要在裁剪到每个轴之前将剪裁矩形增长2 pt,要么将形状的边缘向内移动1 pt。 (ETA:或者,是的,做一个内心的中风。)

答案 1 :(得分:2)

万一有人试图做同样的事情(圆形矩形图像):

UIImageView类的属性layer,类型为CALayer。 CALayer已经内置了这个功能(这对我来说有点令人惊讶,我无法在任何地方找到它):

UIImageView *thumbnailView = [UIImage imageNamed:@"foo.png"];
thumbnailView.layer.masksToBounds = YES;
thumbnailView.layer.cornerRadius = 15.0f;
thumbnailView.layer.borderWidth = 2.0f;
[self.view addSubview:thumbnailView];

也是诀窍。