bezierPathWithRoundedRect: - 奇怪的渲染人工制品

时间:2015-10-28 15:36:52

标签: objective-c cocoa nsbezierpath

我正在绘制一个带有几个圆角的简单矩形:

UIBezierPath * p = [UIBezierPath bezierPathWithRoundedRect:outline
                                         byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
                                               cornerRadii:CGSizeMake(8, 8)];

奇怪的是,左上角似乎不完整 - 缺少一个小缺口:

Image that shows the flaw in the top left hand corner

奇怪的是 - 如果添加[p close] - 问题就会消失。现在文档建议:

  

此方法创建一个封闭的子路径,顺时针方向前进   它创建的方向(相对于默认坐标系)   必要的线和曲线段。

所以我想知道哪里出了问题?我是否误解了文档 - 或者我的代码中是否存在细微的错误/问题?

为完整起见,违规代码为

- (void)drawRect:(CGRect)rect {
CGRect outline = CGRectInset(self.bounds, 4, 4);
UIBezierPath * p = [UIBezierPath bezierPathWithRoundedRect:outline
                                         byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
                                               cornerRadii:CGSizeMake(8, 8)];
// [p closePath];
[[UIColor blackColor] setStroke];
[p setLineWidth:4];
[p stroke];
....

1 个答案:

答案 0 :(得分:1)

看起来最终路径实际上并未关闭,这可能是一个错误(如果是这样,值filing) - 基本上,因为它不知道开始点和结束点是连接的,所以你是看到端盖(by default仅绘制到路径的确切末端)而不是连续线。听起来你的ruby -v 解决方案有效;跟着那个。