所以我有一个[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];
答案 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;
}