用例:我正在继承UIView来创建一个自定义视图,该视图使用圆角矩形“遮罩”UIImage(将图像剪切为圆角矩形)。代码正在运行;我使用了类似于this question的方法。
但是,我想要剪切剪切路径以创建“框架”。这是有效的,但弧形笔划看起来与线条笔划明显不同。我已经尝试将笔划宽度调整为更大的值(我认为它最初是像素化),但抗锯齿似乎以不同的方式处理弧和线。
这是我在模拟器上看到的内容:
这是绘制它的代码:
CGContextSetRGBStrokeColor(context, 0, 0, 0, STROKE_OPACITY);
CGContextSetLineWidth(context, 2.0f);
CGContextAddPath(context, roundRectPath);
CGContextStrokePath(context);
任何人都知道如何顺利排队吗?
答案 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];
也是诀窍。