在调用resizeSubviewsWithOldSize的过程中,如何在动画代理上触发Core Animation?

时间:2020-03-06 14:32:27  来源:igfitidea点击:

我有一些NSView,根据窗口的大小,我将其放入两种布局中的一种。

当相关的超级视图接收resizeSubviewsWithOldSize方法时,我正在调整布局。

可行,但是我想为更改添加动画效果。因此,很自然地,我尝试在设置新帧时调用动画师代理,但是当用户仍在拖动时动画将无法运行。如果在计划完成动画之前放开鼠标,我可以看到动画的尾端,但是在那之前什么也看不到。我尝试确保将kCATransactionDisableActions设置为NO,但这没有帮助。

是否可以启动新动画并在调整大小的过程中使其实际运行?

解决方案

这确实不是答案,但是我建议不要在拖动以调整窗口大小时设置动画效果。屏幕已经在动画(通过移动窗口),进一步的动画可能会在视觉上造成混乱和多余。

最好使用CoreAnimation效果从一种已知状态转换到另一种状态,例如,当偏好窗口调整大小以伴随新窗格的内容,并且我们知道新旧大小时,或者当我们将对象淡入或者淡出时(或者两者)。在调整窗口大小的同时进行动画处理会在视觉上造成混乱,并使用户更难以集中精力获得希望的窗口大小。

我认为我们不能轻易做到这一点,因为CA的动画是通过计时器运行的,并且在用户拖动时处于活动的运行循环模式下,计时器不会触发。

如果我们可以在用户拖动时控制运行环,请试用运行环模式。这样就可以了。我认为我们不能在CA端更改它。