2011-06-26 78 views
4

我有一個uibezierpath的數組。 我怎樣才能按順序繪製每條路徑,但延遲時間會如何顯示動畫? 我目前繪製整個數組像這樣(和技術,它是連續的,我認爲,但這麼快就出現一次全部):順序繪圖/動畫iOS

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

最後,我怎麼能讓每個路徑不同的顏色?

回答

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]; 
    } 
} 

至於顏色的話,你要創建的路徑,這樣就可以使他們任何顏色你喜歡。