如何在正确的时间和地点绘制这条线
问题描述:
为什么这段代码没有正确执行。我试过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
。
至于绘制你想要它们的线条,我无法确切地告诉你要用这个代码做什么。
我试过这个,它可以工作,但每次我调用setNeedsDisplay时,它会删除它刚刚绘制的线条,并用新点(x1,y1)处的线条替换它。无论如何要将这一行存储在数组或其他东西中。如果没有,那么非常感谢 – 2013-03-24 15:06:38
在应用程序启动时创建一个与您的视图大小相同的位图。当每个定时器事件触发时,更改x1等的值并在该位图上绘制新行,然后调用[self setNeedsDisplay]。在你的'drawRect'里面,你只需将这个位图复制到屏幕上即可。有关代码,请参见[此答案](http://stackoverflow.com/a/1962986/14606)。 – MusiGenesis 2013-03-24 23:23:00
您也可以将每条新行的坐标存储在某种类型的集合中(如您所建议的),然后在每次'drawRect'调用期间重新绘制整个(扩展)集合,但效率不高并且可能在一会儿。 – MusiGenesis 2013-03-24 23:25:51