查看图片。小矩形的形式有不同的线宽。指向大中心矩形的线条更粗。以左上角为例:线和左侧比右侧和底部薄。首先我虽然是一种幻觉,但没有。屏幕截图是在模拟器上以100%拍摄的。为什么这个Core Graphics绘图代码会产生变化的线宽?
用于绘制如下图的代码是从的UIView的一个子类的drawRect():
public override void Draw (RectangleF rect)
{
rect = this.Bounds;
CGContext oCtx = UIGraphics.GetCurrentContext();
oCtx.SetFillColor(UIColor.Clear.CGColor);
oCtx.ClearRect(rect);
oCtx.SetLineWidth(2f);
oCtx.SetFillColor(this.BackgroundColor.CGColor);
oCtx.SetStrokeColor(this.BackgroundColor.CGColor);
oCtx.SetAlpha(this.Alpha);
oCtx.AddRect(new RectangleF(rect.X + HANDLE_WIDTH * 0.5f, rect.Y + HANDLE_HEIGHT * 0.5f, rect.Width - HANDLE_WIDTH, rect.Height - HANDLE_HEIGHT));
oCtx.FillPath();
oCtx.SetAlpha(1f);
oCtx.AddRect(new RectangleF(rect.X, rect.Y, HANDLE_WIDTH, HANDLE_HEIGHT));
oCtx.AddRect(new RectangleF(rect.Right - HANDLE_WIDTH, rect.Y, HANDLE_WIDTH, HANDLE_HEIGHT));
oCtx.AddRect(new RectangleF(rect.Right - HANDLE_WIDTH, rect.Bottom - HANDLE_HEIGHT, HANDLE_WIDTH, HANDLE_HEIGHT));
oCtx.AddRect(new RectangleF(rect.X, rect.Bottom - HANDLE_HEIGHT, HANDLE_WIDTH, HANDLE_HEIGHT));
oCtx.StrokePath();
#if DEBUG
oCtx.SetAlpha(0.2f);
oCtx.SetFillColor(UIColor.DarkGray.CGColor);
oCtx.AddRect(this.GetMovableArea(rect));
oCtx.FillPath();
#endif
}
有人可以请解释为什么笔划宽度有什么不同?我也尝试使用StrokeRect()来代替 - 相同的结果。我甚至删除了所有的绘图代码,除了左上角的矩形没有改变。常量HANDLE_HEIGHT和HANDLE_WIDTH都设置为20f。
此问题不会发生在一个真正的iPad?我想不会。模拟器很可能不会执行消除锯齿渲染 - 这就是您看到这种效果的原因。 – Ani 2012-07-23 21:57:13