我正在尝试将 UIView 上的边框与 drawRect 中绘制的线条结合起来。我使用两个相同的宽度。但问题是,有时绘制的线的宽度对两者来说是相同的,有时是不同的——这甚至会随着设备方向的变化而变化!但即使不改变设备方向,它的宽度通常仍然不一样。
边框是用以下方式绘制的:
view.layer.borderColor = [UIColor blackColor].CGColor;
view.layer.borderWidth = 1.0f;
在该视图之上是另一个视图,它是 UIView 的子类。两个视图具有相同的宽度,第二个视图覆盖了上面视图的顶部。覆盖视图使用 drawRect 中的以下代码在左侧绘制一条线,该线应该与其下方的上述视图的边框完美对齐:
CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat x = self.bounds.origin.x;
CGFloat y = self.bounds.origin.y;
CGFloat width = self.bounds.size.width;
CGFloat height = self.bounds.size.height;
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 1.0f);
// Left line
CGContextMoveToPoint(context, x, y);
CGContextAddLineToPoint(context, x, height);
CGContextStrokePath(context);
// Right line
CGContextMoveToPoint(context, width - 1.0f, y);
CGContextAddLineToPoint(context, width - 1.0f, height);
CGContextStrokePath(context);
有什么想法可以实现吗?现在,即使宽度始终为 1.0f,如果两条线都以相同的可见宽度绘制,这只是巧合。
目标是最终得到一个看起来像底部圆角但顶部通常边缘的视图。这就是我这样做的原因。第一个视图有圆角,上面的第二个视图在宽度上与之匹配,但覆盖了顶部,因此顶部的圆角不可见。
纵向截图:
横屏截图:
黄色视图位于白色视图之上。由于 view.layer.borderWidth = 1.0f 绘制了白色视图的黑线。黄色视图左右的黑线是用上面的代码在drawRect中绘制的。方向更改会触发重绘,但绘图代码本身保持不变。两张截图均来自配备 Retina 显示屏的 iPhone(iPhone 4S)。
据我所知,所有值都是“整数”:
x: 0.000000, y: 0.000000
width: 264.000000, height: 10.000000
frame.origin.x: 33.000000, frame.origin.y: 38.000000