想象一下在其父图层左下角绘制的一个小红框(CALayer
实例)(这是托管NSView
的图层的根图层)。
当父视图的框架发生变化时,红色框应保持在屏幕上的相同位置。我这样做是通过相对于父视图的左下角调整它的位置。
问题在于,在某些情况下会出现闪烁,我可以看到红框图层在扩展框架的左下角被绘制,然后显示在正确的位置。
我认为将框架和位置更改包装成一个CATransaction
会使两个更改一起进行,但这并不总是有效(文档说通过使用事务动画将同时开始,但有时似乎还存在竞争条件。)
如何在保持子图层处于感知位置的同时调整父NSView
的框架?
示例和代码:
我自己的想法:
隐藏红色框图层,更新位置,再次显示
使用约束将其绑定到右上角。问题是这个偏移也可能会改变,我将不得不更新可能导致同样闪烁问题的约束。
答案 0 :(得分:0)
尝试删除您已经创建的代码,使图层随视图移动,并将其放在创建图层的位置。
boxLayer.autoresizingMask = kCALayerMaxXMargin | kCALayerMinYMargin;