0

我有一个自定义 UIView 并在 drawRect 方法中创建一个 UIBezierPath 并将其呈现到屏幕上。我遇到的问题是以前的 UIBezierPath 在下一次 drawRect 调用中从视图中删除了吗?

如何将所有这些 UIBezierPaths 保留在屏幕上?

- (void)drawRect:(CGRect)rect
{
    UIBezierPath *path = [UIBezierPath bezierPath];

    // Move to centre and draw an arc.
    [path moveToPoint:self.center];
    [path addArcWithCenter:self.center
                radius:self.radius
            startAngle:self.startAngle
              endAngle:self.endAngle
             clockwise:YES];

    [path closePath];

    path.usesEvenOddFillRule = YES;

    [self.colorToRender setFill];
    [path fill];
}
4

2 回答 2

0

我不确定这是否是最方便的方法,但您必须保留对旧路径的引用,然后将新路径与它们结合起来。

CAShapeLayer * shapeLayer; //Sublayer of your view
CGMutablePathRef combinedPath = CGPathCreateMutableCopy(shapeLayer.path);

CGMutablePathRef linePath = CGPathCreateMutable();

//Create your own custom linePath here

//No paths drawn before
if(combinedPath == NULL)
{
    combinedPath = linePath;
}
else
{
    CGPathAddPath(combinedPath, NULL, linePath);
}
shapeLayer.path = combinedPath;
CGPathRelease(linePath);
于 2013-05-01T14:00:44.387 回答
0

每当drawRect:被调用时,您都必须绘制整个屏幕的内容。您不能将新图纸附加到已经存在的图纸上。因此,您需要存储整个贝塞尔曲线列表并绘制所有贝塞尔曲线。

将它们存储在一个数组中,然后遍历数组并绘制每个数组。

此外,您不应该真的在drawRect:...中创建新的贝塞尔曲线

于 2013-05-01T13:59:21.753 回答