我有一个UIView
并在其中我已经绘制了使用核心图形通过覆盖drawRect
。这个视图还包含一个子视图,它也绘制了一条线。然而,尽管这两种观点都使用几乎相同的代码(用于测试至少),他们绘制的线条不会出现相同的:iPhone核心图形为子视图较粗的虚线
正如你所看到的 - 在虚线顶部明显比底部厚,我不知道为什么。以下是两个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);
为什么要在第一个视图的'drawRect:'中添加子视图? – jer 2010-11-19 22:34:57
@jer:这一定很重要吗?我可以从另一个方法如'initWithFrame'添加子视图,但是线宽仍然存在差异。除非我不打算将子视图添加到本身“绘制”并因此出现问题(?)的视图上,但我没有在任何地方读过......但是。 – JoeR 2010-11-19 22:41:24
@JoeR,是的,它可能很重要 - 每次您的视图自己绘制时都会添加子视图,因此您可以通过放置多个相同的子视图来结束视觉效果 - 这可能会导致子视图线变得更粗,因为它们被绘制多次 – Vladimir 2010-11-19 22:44:12