我正在尝试使用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命令的记录,因此没有任何我已经开始绘制线的引用。
我在这里做错了吗?有没有办法引用已绘制的线?
答案 0 :(得分:1)
您基本上需要将每次调用都视为drawRect
,就好像它是从头开始一样。即使您只被要求更新视图的子更正,您也应该假设与图形上下文关联的任何状态(例如绘图位置和颜色)都将被重置。因此,在您的情况下,您需要跟踪起始位置并每次重绘整行。
答案 1 :(得分:0)
我认为更好的方法是为一些瘦UIView制作动画。看看我的回答here。
如果您需要的不仅仅是水平线,请旋转该视图。我认为这对表现来说更好。