在UIView for ios中绘制矩形时,我仍然遇到同样的问题:矩形边距将它们的颜色与背景混合。我尝试了几种具有相同结果的矩形绘制方法 - 使用贝塞尔曲线路径,逐行绘制,绘制边距并填充矩形的内部。
视图的框架本身始终正确绘制。我甚至考虑在需要矩形时使用视图,但这似乎不是特别做事的正确方法,因为我需要绘制其中的许多。
这是我的问题的一个例子。为了比较,我正在绘制一个具有相同尺寸的矩形绿色视图:
CGRect horizontalBar = CGRectMake(2, 2, 10, 6);
UIView* horizontalBarSubView = [[UIView alloc] initWithFrame:horizontalBar];
horizontalBarSubView.backgroundColor = [UIColor greenColor];
[self addSubview:horizontalBarSubView];
[horizontalBarSubView release];
对于矩形本身:
CGRect horizontalBar = CGRectMake(2, 20, 10, 6);
UIBezierPath* horizontalBarPath = [UIBezierPath bezierPathWithRect:horizontalBar];
[[UIColor greenColor] set];
[horizontalBarPath fill];
这会产生以下结果(10倍变焦):
是什么导致颜色混合?
我该如何避免这种情况?
答案 0 :(得分:2)
您是否尝试过搞乱CGContext?
CGContextSetShouldAntialias
在此处查看图形上下文设置:
http://www.apeth.com/iOSBook/ch15.html
“当您在图形上下文中绘制时,绘图将遵循上下文的当前设置。因此,过程始终首先配置上下文的设置,然后绘制。”
您需要一个没有设置CGContextSetShouldAntialias标志的上下文。
尽管如评论中所述,这将填充否则将与矩形颜色混合的像素。
答案 1 :(得分:2)
@Almo是正确的,你的问题是抗锯齿,但你确定这是实际的代码和值吗?这不应该是反别名,我的测试表明它没有。为了得到你的结果,我必须改变你的道路:
CGRect horizontalBar = CGRectMake(2.5, 20.5, 10, 6);
填充分数像素上的路径将为您提供所见效果。此外,在具有奇数宽度的整数像素上描绘路径将以这种方式消除锯齿。 (全部采用非Retina显示屏; Retina略有不同。)
我一般不建议像@Almo建议的那样关闭抗锯齿功能。相反,您只需要确保您的路径绘制或填充整个像素。
iOS 5 Programming Pushing the Limits第114页第6章详细介绍了这一点。