2012-04-01 58 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; 

}