用于子视图的iPhone Core Graphics更粗的虚线

时间:2010-11-19 22:15:51

标签: iphone uiview core-graphics

我有UIView并且在其中我通过覆盖drawRect使用Core Graphics绘制了一条线。此视图还包含一个也绘制一条线的子视图。但是,虽然两个视图都使用几乎相同的代码(至少用于测试目的),但它们上绘制的线条看起来并不相同:

Image problem

正如您所看到的 - 顶部的虚线明显比底部的粗线,我不明白为什么。以下是UIViews方法中两个drawRect使用的代码。如果您知道为什么会这样,那么我将非常感谢您的帮助和建议!

第一视图:

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);

CGFloat dashes[] = {1,1};

CGContextSetLineDash(context, 0.0, dashes, 2);
CGContextSetLineWidth(context, 0.6);

CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMaxY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMaxY(rect));

CGContextStrokePath(context);

SubUIView *view = [[SubUIView alloc] initWithFrame:rect];
[self addSubview:view];
[view release];

视图肯定只被绘制一次。我感谢drawRect可能不是添加子视图的最佳位置,但问题仍然存在于主initWithFrame方法中。

第二视图:

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);

CGFloat dashes[] = {1,1};

CGContextSetLineDash(context, 0.0, dashes, 2);
CGContextSetLineWidth(context, 0.6);

CGContextMoveToPoint(context, CGRectGetMinX(rect), CGRectGetMidY(rect));
CGContextAddLineToPoint(context, CGRectGetMaxX(rect), CGRectGetMidY(rect));

CGContextStrokePath(context);

2 个答案:

答案 0 :(得分:6)

如果你的rect不是整数,那么它可能是抗锯齿的结果。您可以使用CGContextSetShouldAntialias( context, NO )禁用抗锯齿功能。我认为还有一个用于制作矩形积分的函数,但我不记得它是什么。

答案 1 :(得分:-2)

首先,您应该解决绘图代码为WET *的问题。你说你出于“测试目的”这样做,但这实际上使测试更难,因为你必须改变两段代码和/或保持你正在使用的版本。最糟糕的情况是,您以不同的方式更改两段代码,并且必须手动合并它们。

我会说将虚线代码移到子视图中,为两段代码需要做的事情添加不同的属性,并创建两个子视图(而不是drawRect: - 认真)。

至于实际问题:嗯,我看不到一个大图像,我看到一个很小的图像,我只能猜测上线比下线更大胆意味着上线更浓。

顺便说一下,rect不一定是你图像的界限。不要以为它是,或者你会得到时髦的绘画,当它不是。假设它是界限的一部分 - 可能,但可能不是,整个事物。当您的意思是[self bounds]时,请说[self bounds]

问题很可能是CGRectGetMidY([self bounds])CGRectGetMaxY([self bounds])之间的差异。一个包括分割像素的分数,而另一个分数是一个像素的倍数或接近它。 (不一定是Retina显示屏上1-的倍数,1 pt = 2像素,因此1像素= 0.5 pt。)尝试将这两个数字放在地板上,并可选择添加0.5,并查看您更喜欢哪种方式。

没有办法让它以0.6磅的线宽完美地工作。根本没有完整的像素数。你所能做的就是找出最好看的东西。

*写在别处,与DRY相反。