想象一个小红框(CALayer
实例)绘制在其父层(即层托管的根层)的左下角NSView
。
当父视图的框架发生变化时,红框应该保持在屏幕上的相同位置。我通过调整它相对于父视图左下角的位置来做到这一点。
问题是在某些情况下会闪烁,我可以看到在扩展框架的左下角绘制了红色框层,然后才显示在正确的位置。
我假设将框架和位置更改合并为一个CATransaction
会使这两个更改一起进行,但这并不总是有效(文档说通过使用事务,动画将同时开始,但似乎仍然存在比赛有时情况)。
如何NSView
在将子图层保持在其感知位置的同时调整父图层的框架?
示例和代码:
我自己的想法:
隐藏红框层,更新位置,再次显示
使用约束将其绑定到右上角。问题是这个偏移量也可能发生变化,我必须更新可能导致相同闪烁问题的约束。