在IOS上使用Quartz 2d以编程方式动画绘制线条

时间:2010-12-21 10:28:33

标签: ios objective-c path quartz-graphics cgcontext

我正在尝试使用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命令的记录,因此没有任何我已经开始绘制线的引用。

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

2 个答案:

答案 0 :(得分:1)

您基本上需要将每次调用都视为drawRect,就好像它是从头开始一样。即使您只被要求更新视图的子更正,您也应该假设与图形上下文关联的任何状态(例如绘图位置和颜色)都将被重置。因此,在您的情况下,您需要跟踪起始位置并每次重绘整行。

答案 1 :(得分:0)

我认为更好的方法是为一些瘦UIView制作动画。看看我的回答here
如果您需要的不仅仅是水平线,请旋转该视图。我认为这对表现来说更好。