5

想象一个小红框(CALayer实例)绘制在其父层(即层托管的根层)的左下角NSView

当父视图的框架发生变化时,红框应该保持在屏幕上的相同位置。我通过调整它相对于父视图左下角的位置来做到这一点。

问题是在某些情况下会闪烁,我可以看到在扩展框架的左下角绘制了红色框层,然后才显示在正确的位置。

我假设将框架和位置更改合并为一个CATransaction会使这两个更改一起进行,但这并不总是有效(文档说通过使用事务,动画将同时开始,但似乎仍然存在比赛有时情况)。

如何NSView在将子图层保持在其感知位置的同时调整父图层的框架?

示例和代码:

NSView 和盒子层

我自己的想法:

  1. 隐藏红框层,更新位置,再次显示

  2. 使用约束将其绑定到右上角。问题是这个偏移量也可能发生变化,我必须更新可能导致相同闪烁问题的约束。

4

1 回答 1

0

尝试删除您已经制作的代码以使图层随视图移动,并将其放在您正在创建图层的位置。

boxLayer.autoresizingMask = kCALayerMaxXMargin | kCALayerMinYMargin;
于 2011-11-22T03:58:08.680 回答