如何在调用resizeSubviewsWithOldSize期间在动画师代理上触发Core Animation?

时间:2008-09-22 13:53:48

标签: cocoa core-animation

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

当相关的superview收到resizeSubviewsWithOldSize方法时,我正在调整布局。

这有效,但我想为变化添加动画效果。所以当我设置新帧时,我自然尝试调用动画代理,但是当用户仍在拖动时动画将不会运行。如果我在计划完成动画之前释放鼠标,我可以看到动画的尾部,但直到那时才能看到。我尝试确保将kCATransactionDisableActions设置为NO,但这没有帮助。

是否可以启动新动画并实际在调整大小期间运行?

2 个答案:

答案 0 :(得分:2)

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

如果您可以在用户拖动时控制runloop,请使用runloop模式。这将使它成功。我不认为你可以在CA方面改变它。

答案 1 :(得分:0)

这真的不是一个答案,但我建议不要在拖动以调整窗口大小时动画。屏幕已经是动画(从窗口移动) - 进一步的动画可能会在视觉上混乱和无关。

CoreAnimation效果最适合用于从一个已知状态移动到另一个已知状态 - 例如,当首选项窗口调整大小以伴随新窗格的内容时,您既知道新旧大小,也不知道当您淡化对象时进出(或两者兼而有之)。在窗口调整大小时进行动画会在视觉上造成混乱,并且使用户更难以专注于获取他们想要的窗口大小。