Как нарисовать линию пиксель за пикселем, используя цель C - PullRequest
0 голосов
/ 01 апреля 2011

Я хочу нарисовать линию (на iphone) так, чтобы я мог видеть каждый рисуемый пиксель.

В настоящее время я вызываю метод drawRect с использованием таймера.

Ниже приведен кодгде я рисую волну, используя значения из массива:

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 Ответ

2 голосов
/ 01 апреля 2011

Просто перерисуйте материал до нужной вам точки, например:

    for (int j = 0; j <= i; j++) {
        x2 = j;
        y2 = ecg[j];
        CGContextAddLineToPoint(c, x2, y2);
        x = x2;
        y = y2;
    }

    CGContextStrokePath(c); 

Не вызывайте setNeedsDisplay: в вашем drawRect:, это вызывает перерисовку представления сразу послеи снова.Также старайтесь избегать глобальных переменных.Например, здесь нет необходимости «кэшировать» x, x2, y и y2.Определите их внутри drawRect:.

...