2012-04-01 61 views
0

所以我有一個[NSMutableArray * paths]包含對應於屏幕上繪製的每個單獨路徑的UIBezierPath。我也有另一個NSMutable陣列顏色,其中包含路徑的相應顏色。我遇到的問題是,雖然兩個數組是變異的,我可以看到兩者的數量都增加了,但下面的drawRect方法似乎只能繪製數組中的最後一個路徑。 我已經搜遍了很多問題,並且基於迄今爲止我讀到的內容,這個問題似乎讓我們看到了新手,而且主要是因爲類型不匹配。我甚至試圖指出回報,這是徒勞的。 下面是從的drawRect無法在NSMutable數組中訪問UIBezierPath

int cnt = paths.count; 

if (cnt != 0) 
{ 
    for(int i = 0; i < cnt; i++) 
    { 
     NSLog(@"Drawing path:%i", i); 

     UIColor *color; 

     color = [colors objectAtIndex:i]; 
     [color setStroke]; 


     UIBezierPath *path = [paths objectAtIndex:i]; 
     path.lineWidth = 2; 

     [path stroke]; 
    } 
} 
我每次調用[自我setNeedsDisplay]它抹了我的整個屏幕上的時間

我的代碼。

我是正確的假設,我不處理我的

UIBezierPath *path = [paths objectAtIndex:i]; 

呢?

非常感謝你,並提前。

UPDATE:

我是通過一些代碼翻找,現在它幾乎看起來像有是ARC被釋放我NSMutable數組的內容另一種可能性。我試着做下面的事情,並得到一個編譯器錯誤。

[paths retain]; 
+0

嗯,是的,講求實際的人,我,我意識到,從某種意義上說,我沒有必要使用NSMutable陣列我正在嘗試做什麼。在我需要實現「撤消功能」之前,我將堅持使用三個UIBezierPath(紅色,藍色和綠色)和一個指向三者之一的currentPath指針。這樣,在繪製時,我可以簡單地檢查每個路徑是否爲零,否則繪製路徑。爲了使內存更簡單,我正在考慮實現一個過濾器,以便只有在自上次渲染後更改路徑時纔會重繪路徑。 – Khanal 2012-04-02 01:17:40

回答

0

Besure你把你的路徑,你的路徑列AFER每次抽獎

- (void)drawRect:(CGRect)rect { 

    [brushPattern setStroke]; 
    UIBezierPath *drawPath = [UIBezierPath bezierPath]; 
    drawPath.lineCapStyle = kCGLineCapRound; 
    drawPath.miterLimit = 0; 
    drawPath.lineWidth = thisLineWidth; 

    for (UIBezierPath *path in pathArray) 
     [drawPath appendPath:path]; 

    UIBezierPath *path = [self pathForCurrentLine]; 
    if (path) 
     [drawPath appendPath:path]; 


    [drawPath stroke]; 


} 

- (UIBezierPath*)pathForCurrentLine { 


    UIBezierPath *path = [UIBezierPath bezierPath]; 
    [path moveToPoint:startPoint]; 
    [path addLineToPoint:endPoint]; 

    return path; 

}