更改路径时CAShapeLayer不会更新

use*_*249 4 cocoa calayer cashapelayer

我正在使用CAShapeLayer.我试图使它的路径在鼠标事件发生时改变.例如,当发生鼠标按下事件时,CGMutableRefPath会将路径附加到a ,然后将形状图层的路径设置为它.

问题:当我CAShapeLayer使用新路径设置路径时,除非我这样做,否则不会使用新路径更新显示.如何告诉系统形状图层的路径已更改并重绘自身?

注意:当我创建可变路径的副本并将其传递时,它可以正常工作,但每次执行复制都不会有效并导致计算机在有很多路径时变慢.

CGMutablePathRef paths = CGPathCreateMutable();
CAShapeLayer *shapeLayer = [CAShapeLayer layer];

- (void)mouseDown:(NSEvent *)event {
    CGPathAddEllipseInRect(paths, nil, rect);
    self.shapeLayer.path = paths; // Works once, but subsequent calls do nothing
    self.shapeLayer.path = CGPathCreateCopy(paths); // Works, but super slow
}
Run Code Online (Sandbox Code Playgroud)

use*_*249 7

调用[self.shapeLayer didChangeValueForKey:@"path"]强制图层重绘自己.