Cocoa 更改路径时不更新CAShapeLayer
我使用的是Cocoa 更改路径时不更新CAShapeLayer,cocoa,calayer,cashapelayer,Cocoa,Calayer,Cashapelayer,我使用的是CAShapeLayer。我试图使其路径在鼠标事件发生时改变。例如,当发生鼠标按下事件时,将路径附加到CGMutableRefPath中,然后将形状层的路径设置为该路径 问题:当我用新路径设置CAShapeLayer路径时,除非我这样做,否则显示不会用新路径更新。如何告知系统形状层的路径已更改,并重新绘制自身 注意:当我创建可变路径的副本并传递它时,它可以工作,但是每次复制都不起作用,并且当有很多路径时,会导致我的计算机速度减慢 CGMutablePathRef paths = CGP
CAShapeLayer
。我试图使其路径在鼠标事件发生时改变。例如,当发生鼠标按下事件时,将路径附加到CGMutableRefPath
中,然后将形状层的路径设置为该路径
问题:当我用新路径设置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
}
确保您的路径有效,即它具有有效的顶点和填充等。例如(这只是一个用颜色填充的200 X 200矩形的示例,您可以使用自己的): 更新路径后,调用 或
或者两者都可以。调用
[self.shapeLayer didChangeValueForKey:@“path”]
强制层重新绘制自身。谢谢,但我尝试在形状层上调用setNeedsDisplay
和setNeedsLayout
,但没有效果。我很确定我的路径都是有效的。它们都是R=50的圆,但起源不同。工作原理是创建路径的副本并设置它。示例:self.shapeLayer.path=CGPathCreateCopy(路径)代码>。但是,随着时间的推移进行复制会导致我的计算机陷入困境。我已经找到了答案。我必须调用[self.shapeLayer didChangeValueForKey:@“path”]
来重新渲染层本身。不过,感谢您的帮助。如果它帮助mark处于正确位置(选中标记)-它将帮助您在将来更快地获得答案。啊,听起来像setPath:
看到您传递的指针与属性已经具有的指针相同,而不查看路径本身是否已更改(这将非常昂贵)。如果您传递了另一个指针,您的工作只是强制执行可能发生的操作。(显然,CAShapeLayer
并没有复制路径,即使路径是可变的,但也不会在路径改变时自动更新,这是我自己的问题,也是我写这篇文章的原因。)
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context, paths);
CGPathAddRect(paths, NULL, CGRectMake(100.0, 100.0, 200.0, 200.0)); // generates a warning specified later
CGContextFillPath(context);