Как нарисовать линию, чтобы она появлялась на экране попиксельно? - PullRequest
0 голосов
/ 11 августа 2011

Я новичок в 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 голосов
/ 11 августа 2011

Расширьте свою строку пиксель за пикселем в функции и вызовите ее через 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);

каждый раз или только один раз.

0 голосов
/ 11 августа 2011

Я думаю, вам нужно добавить задержку и обновить окно в цикл for, если вы хотите, чтобы он рисовался.

...