4

私はuibezierpathの配列を持っています。各パスを順番に描画するにはどうすればよいですか?ただし、アニメーション化されているように見えるように遅延がありますか?私は現在、このように配列全体を描画しています(技術的には、シーケンシャルだと思いますが、非常に高速で一度に表示されます):

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

最後に、各パスを異なる色にするにはどうすればよいですか?

4

1 に答える 1

3

より多くのパスを描画するたびに、ビューを複数回再描画する必要があります。これを実現するには、ある種のタイマーを使用し、描画しているパスを追跡する方法が必要です。

パスを追跡するには、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];
    }
}

色に関しては、パスを作成しているので、好きな色にパスを作成できます。

于 2011-06-26T08:21:59.340 に答える