如何绘制一条线,使其在屏幕上逐个像素地显示?

时间:2011-08-11 05:58:22

标签: iphone objective-c ios core-graphics

我是Objective-C的新手,我试图在屏幕上绘制一条线,使其一次出现一个像素。

使用下面的绘图代码,我可以绘制线条,但它一次显示在屏幕上,而不是随时间增量:

CGContextRef c = UIGraphicsGetCurrentContext();

CGFloat colour[4] = {1.0f,0.0f,0.0f,1.0f};
CGContextSetStrokeColor(c, colour);
CGContextBeginPath(c);
NSLog(@"fired...");
int line[10] = {136, 137, 138, 139,140,145,180,155}; 

CGContextMoveToPoint(c, x,0);

for (i = 0; i <10; i++) {
    x = line[i];
   // y = line[j];

    CGContextAddLineToPoint(c, x,0);
    x = x;
    //y = y;
}

CGContextStrokePath(c); 
x=x;
[self setNeedsDisplay];
//i++; 

如何实现线条的逐像素外观?

2 个答案:

答案 0 :(得分:0)

如果你想看到它被绘制,我认为你需要为你的for循环添加一个延迟和一个窗口刷新。

答案 1 :(得分:0)

在函数中逐个像素地延伸线条,并在0.5秒后调用它(比如说)。具有线点的数组必须是全局的,并且您还需要一个全局计数器:

int line [10] = {136,137,138,139,140,​​145,180,155}; int i = 0;

- (void)extendLine {
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGFloat colour[4] = {1.0f,0.0f,0.0f,1.0f};
    CGContextSetStrokeColor(c, colour);
    CGContextBeginPath(c);
    NSLog(@"fired...");

    CGContextMoveToPoint(c, x,0);

    x = line[i];
    // y = line[j];

    CGContextAddLineToPoint(c, x,0);
    x = x;
    //y = y;

    CGContextStrokePath(c); 
    x=x;
    [self setNeedsDisplay];
    i++;
}

呼叫:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:(1.0) target:self selector:@selector(extendLine) userInfo:nil repeats:YES];

我对图形上下文和东西不是很有经验所以我不知道你是否需要打电话

CGContextSetStrokeColor(c, colour);
CGContextBeginPath(c);

每次或只是一次。