在 NSView 边界更改中托管的 CALayer

Posted

技术标签:

【中文标题】在 NSView 边界更改中托管的 CALayer【英文标题】:hosted CALayer in NSView bounds change 【发布时间】:2014-02-06 19:27:28 【问题描述】:

我有一个托管在 NSView 中的自定义 CALayer,包含在 NSScrollView 中,在 CALayer 上设置属性会导致它的边界发生变化。

问题是 NSView 真的想要拥有包含的 CALayer 的边界,我可以通过在边界上添加 KVO 来使其工作,因此当层边界发生变化时,它会更改 NSView 边界(这会将层边界更改为相同的值 - 幸运的是,如果值实际上没有改变,KVO 不会递归)。

有没有更好的方法?似乎通过布局系统会更好,但我只能指定我的首选框架(通过我的变换我的边界) - 这变成了设置我的边界,但有一些舍入错误。

CALayer 应该如何请求更改边界?还是我目前的 hack 是首选机制...

【问题讨论】:

【参考方案1】:

我不完全确定你在做什么,但我会让 CALayer 在它的 NSView 上设置一个 NSSize ivar,这会改变 NSView 的自动布局的固有大小,然后在视图上调用 setNeedsRelayout:YES。如果您要使用附加到视图的图层,请不要试图让尾巴摇摆不定。

【讨论】:

以上是关于在 NSView 边界更改中托管的 CALayer的主要内容,如果未能解决你的问题,请参考以下文章

动画边界更改时具有 CALayer 有线效果的自定义视图

动画边界更改时具有 CALayer 有线效果的自定义视图

NSView的特定圆角

导入SwiftUI时如何使NSView与CALayerDelegate兼容?

如果 CALayer 边界如何独立地 CALayer 图像缩放

使用层支持的 NSView 作为 NSDockTile contentView