我想绘制一条线(在iphone上),以便我可以查看每个正在绘制的像素。
我目前正在使用计时器调用drawRect方法。
以下是我使用数组中的值绘制wave的代码:
static int i=0;
int x = 10;
int y = 0;
int x2;
int y2;
- (void)drawRect:(CGRect)rect
{
// Drawing code.
CGContextRef c = UIGraphicsGetCurrentContext();
CGFloat black[4] = {0.0f,0.0f,0.0f,1.0f};
CGContextSetStrokeColor(c, black);
CGContextBeginPath(c);
NSLog(@"fired...");
int ecg[358] = {36, 37, 37, 36, 34, 33, 33, .... ,36}; //Assume the data is there
CGContextMoveToPoint(c, x, y);
x2 = i;
y2 = ecg[i];
CGContextAddLineToPoint(c, x2, y2);
x = x2;
y = y2;
CGContextStrokePath(c);
[self setNeedsDisplay];
i++;
}
- (void) awakeFromNib
{
NSTimer *timer;
timer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(drawRect:) userInfo:nil repeats:YES];
}
调用drawRect时,我一次只能看到一行正在绘制。但我没看到整个图像。我想不出一种不同的方法,以便在屏幕上看到波浪。
此外,永远不会调用initWithFrame方法,因此必须使用awakeFromNib来声明计时器,如果我错了,请更正我。
任何指向线条绘制动画的指针都会有所帮助。
谢谢
答案 0 :(得分:2)
只需将这些内容重新绘制到您想要的位置,例如:
for (int j = 0; j <= i; j++) {
x2 = j;
y2 = ecg[j];
CGContextAddLineToPoint(c, x2, y2);
x = x2;
y = y2;
}
CGContextStrokePath(c);
请勿在{{1}}中调用setNeedsDisplay:
,这会导致视图一次又一次地重新绘制。另外,尽量避免全局变量。例如,这里不需要“缓存”x,x2,y和y2。在drawRect:
内定义它们。