无法在NSMutablearray中访问UIBezierPath

时间:2012-04-01 23:04:48

标签: nsmutablearray

所以我有一个[NSMutableArray * paths]包含UIBezierPaths,它们对应于屏幕上绘制的每个单独路径。我还有另一个NSMutable数组颜色,包含路径的相应颜色。我遇到的问题是虽然两个数组都在变异,我可以看到两者的数量都在增加,但是下面的drawRect方法似乎只能绘制数组中的最后一个路径。 我已经仔细研究了很多问题,根据我到目前为止所读到的内容,这个问题似乎让我们感到新手,主要是因为类型不匹配。我甚至试图回归Typecast,这是徒劳的。 这是我在drawRect

中的代码
 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];
    }
}

每当我调用[self setNeedsDisplay]时,它都会消除我的整个屏幕。

我认为我没有处理我的

是正确的
UIBezierPath *path = [paths objectAtIndex:i];

好?

非常感谢您提前。

更新:

我正在翻阅更多的代码,现在几乎看起来ARC还有另一种可能性,即释放我的NSMutable数组的内容。我尝试了以下操作并遇到编译器错误。

[paths retain];

1 个答案:

答案 0 :(得分:0)

确保在每次绘制后将路径添加到路径数组

- (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;

}