I'm using a CAShapeLayer
. I'm trying to make it so that its path changes whenever a mouse event occurs. For example, when a mouse down event occurs, a path is appended to a CGMutableRefPath
and then then the shape layer's path is set to it.
The problem: When I set the CAShapeLayer
path with a new path, the display is not updated with a new path unless I do . How do I tell the system that the shape layer's path has changed and to redraw itself?
Note: When I create a copy of the mutable path and pass it along, it works, but doing a copy every time is not performant and causes my computer to slow down when there are lots of paths.
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
}
Call [self.shapeLayer didChangeValueForKey:@"path"]
to force the layer to redraw itself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With