如何使用目标C逐个像素地绘制线条

时间:2011-04-01 13:58:13

标签: iphone objective-c drawing core-animation

我想绘制一条线(在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来声明计时器,如果我错了,请更正我。

任何指向线条绘制动画的指针都会有所帮助。

谢谢

1 个答案:

答案 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:内定义它们。