последовательное рисование / анимация iOS - PullRequest
4 голосов
/ 26 июня 2011

У меня есть массив uibezierpath's.Как я могу нарисовать каждый путь в последовательности, но с задержкой, чтобы он был анимирован?В настоящее время я рисую весь массив следующим образом (и технически, я думаю, что он последовательный, но настолько быстрый, что появляется сразу):

for (UIBezierPath * path in myArrayOfBezierPaths){
    path.lineWidth=3;
    [path stroke];
    [path release];
}

наконец, как я могу сделать каждый путь разным цветом?

1 Ответ

3 голосов
/ 26 июня 2011

Вам необходимо перерисовать вид несколько раз, каждый раз рисуя новые пути. Для этого вам нужно использовать какой-нибудь таймер и иметь возможность отслеживать, какие пути вы рисуете.

Чтобы отслеживать пути, вы можете использовать переменную экземпляра NSInteger и увеличивать ее каждый раз, когда рисуется другой путь, затем в -drawRect: проверьте значение этой переменной и нарисуйте соответствующее количество путей.

Тогда вы бы реализовали метод, который обновляет ivar и перерисовывает представление. Вот очень упрощенная версия:

//assume pathsToDraw is an NSInteger ivar
//and that myArrayOfBezierPaths is an NSArray ivar
//containing UIBezierPath objects


- (void)startDrawingPaths
{
    //draw the first path
    pathsToDraw = 1;
    [view setNeedsDisplay];

    //schedule redraws once per second
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateView:) userInfo:nil repeats:YES];
}

- (void)updateView:(NSTimer*)timer
{
    //increment the path counter
    pathsDrawn++;

    //tell the view to update
    [view setNeedsDisplay];

    //if we've drawn all our paths, stop the timer
    if(pathsDrawn >= [myArrayOfBezierPaths count])
    {
        [timer invalidate];
    }
}

Ваш метод рисования будет выглядеть примерно так:

- (void)drawRect:(CGRect)rect
{
    NSInteger i = 0;
    for (i = 0; i < pathsDrawn; i++) 
    {
        UIBezierPath * path = [myArrayOfBezierPaths objectAtIndex:i];
        path.lineWidth=3;
        [path stroke];
    }
}

Что касается цвета, вы создаете пути, поэтому вы можете делать их любым цветом, который вам нравится.

...