如何在正确的时间和地点绘制这条线

如何在正确的时间和地点绘制这条线

问题描述:

为什么这段代码没有正确执行。我试过setNeedsDisplay和setNeedsLayout,但是这段代码似乎没有被执行。即使它执行了,它也会在它不应该执行的时候执行,并且它执行错误,这意味着它会在错误的位置和随机的长度中绘制该行。 - (无效)drawNW {如何在正确的时间和地点绘制这条线

NSLog(@"%f",x1); 
NSLog(@"%f",y1); 

CGContextSetStrokeColorWithColor(c, [UIColor blueColor].CGColor); 
CGContextSetLineWidth(c, 10.0); 
CGContextMoveToPoint(c, x1, y1); 
CGContextAddLineToPoint(c, -(sqrtf(2)/2)*length + x1, ((sqrtf(2)/2)*length + y1)); 
CGContextStrokePath(c); 

length = line.bounds.size.height; 

}

长度,X1和Y1被浮子恒定在0.1秒的间隔由一个的NSTimer改变:

NWTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(startMoving) userInfo:nil repeats:YES]; 

定时器呼叫这个调用drawNW的代码:

x1 = x1-2.5; 
y1 = y1-2.5; 
length= length+5; 
[self drawNW]; 

你的鳕鱼e绘制东西(CGContext ...等)需要在你的班级drawRect方法中。你的定时器驱动代码应该改变x1,y1和长度的值,然后调用[self setNeedsDisplay]。这告诉iOS需要重新绘制视图,然后调用drawRect

至于绘制你想要它们的线条,我无法确切地告诉你要用这个代码做什么。

+0

我试过这个,它可以工作,但每次我调用setNeedsDisplay时,它会删除它刚刚绘制的线条,并用新点(x1,y1)处的线条替换它。无论如何要将这一行存储在数组或其他东西中。如果没有,那么非常感谢 – 2013-03-24 15:06:38

+0

在应用程序启动时创建一个与您的视图大小相同的位图。当每个定时器事件触发时,更改x1等的值并在该位图上绘制新行,然后调用[self setNeedsDisplay]。在你的'drawRect'里面,你只需将这个位图复制到屏幕上即可。有关代码,请参见[此答案](http://stackoverflow.com/a/1962986/14606)。 – MusiGenesis 2013-03-24 23:23:00

+0

您也可以将每条新行的坐标存储在某种类型的集合中(如您所建议的),然后在每次'drawRect'调用期间重新绘制整个(扩展)集合,但效率不高并且可能在一会儿。 – MusiGenesis 2013-03-24 23:25:51