4

我正在尝试向我CAShapeLayer的路径添加一个子路径,但是除非我首先分配到nil路径然后我重新分配myPathCAShapeLayer. 我试过了,setNeedsRedisplay但它不起作用。

这是LoadViewwheremyPathshapeLayerare 属性中的代码:

// The CGMutablePathRef
CGPathMoveToPoint(myPath, nil, self.view.center.x, self.view.center.y);
CGPathAddLineToPoint(myPath, nil, self.view.center.x + 100.0, self.view.center.y - 100.0);

// The CAShapeLayer
shapeLayer = [CAShapeLayer layer];
shapeLayer.path = myPath;
shapeLayer.strokeColor = [UIColor greenColor].CGColor;
shapeLayer.lineWidth = 2.0;
[self.view.layer addSublayer:shapeLayer];

例如,这是我对路径进行更改的地方。我只是添加一个新的子路径myPath

- (void)handleOneFingerSingleTapGesture:(UIGestureRecognizer *)sender
{
    // I add a new subpath to 'myPath'
    CGPathMoveToPoint(myPath, nil, self.view.center.x, self.view.center.y);
    CGPathAddLineToPoint(myPath, nil, self.view.center.x + 100.0, self.view.center.y + 100.0);

    // I must do this to show the changes
    shapeLayer.path = nil; 
    shapeLayer.path = myPath;
}

任何人都知道如何处理这个?我正在使用 iOS 5.0。

4

2 回答 2

0

您应该重置路径超时,在修改路径之前通过 removeAllPoints 刷新路径图。

在目标 C 中:

[path removeAllPoints];
[path moveToPoint:p];
[path addLineToPoint:CGPointMake(x, y)];

shapeLayer.path = path.CGPath;

在 Swift 4 中:

path.removeAllPoints()
path.move(to: p1)
path.addLine(to: p2)

shapeLayer.path = path.cgPath
于 2017-08-19T16:26:12.390 回答
-1

您必须调用 [shapeLayer didChangeValueForKey:@"path"]以使图层重新渲染自身。

于 2013-08-03T00:19:57.843 回答