【发布时间】:2012-07-23 18:25:15
【问题描述】:
看图。形状小矩形有不同的线宽。指向大中心矩形的线更粗。以左上角为例:to 线和左边的比右边的和底部的要细。 首先,我虽然这是一种视错觉,但不是。截图是在模拟器上 100% 截取的。
下面用于绘制视图的代码来自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上会出现吗?我认为不会。模拟器很可能没有执行抗锯齿渲染 - 这就是您看到这种效果的原因。
标签: xamarin.ios core-graphics cgcontext