を使用してい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
}