0

我正在尝试使用 Quartz 2d 绘制一条动画生长线,方法是随着时间的推移逐渐向现有线添加点。我开始绘制一条新线,在 UIView 的 drawRect 方法中,通过获取 CGContextRef,设置其绘制属性,并将第一个点移动到 (0,0)。

CGContextRef context= UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context,[UIColor blueColor].CGColor);
CGContextSetLineWidth(context, 2);
CGContextMoveToPoint(context,0,0);

后来,在我的下一个 drawRect 调用中,我尝试再次扩展该行,获取 CGContextRef,并为其添加一个新点。

GContextRef context= UIGraphicsGetCurrentContext();
CGContextAddLineToPoint(context,x,y);

但似乎当前的 CGContextRef 没有任何我上次调用 drawRect 的 CGContextMoveToPoint 命令的记录,因此没有任何我已经开始画线的参考。

我在这里做错了吗?有没有办法引用已经绘制的线?

4

2 回答 2

1

您基本上需要将每个调用drawRect视为从头开始。即使只要求您更新视图的子区域,您也应该假设与图形上下文相关的任何状态,例如绘图位置和颜色,都将被重置。因此,在您的情况下,您需要跟踪起始位置并每次重绘整条线。

于 2010-12-21T16:03:44.007 回答
0

我认为更好的方法是为一些薄的 UIView 设置动画。看看我的答案在这里
如果您需要的不仅仅是水平线,请旋转该视图。我认为这对性能更好。

于 2012-05-15T16:20:41.493 回答