3

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

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

这行得通,但我想动画变化。所以很自然地,我在设置新帧时尝试调用动画代理,但是当用户仍在拖动时动画不会运行。如果我在动画计划完成之前释放鼠标,我可以看到动画的结尾,但在那之前什么都看不到。我尝试确保将 kCATransactionDisableActions 设置为 NO,但这并没有帮助。

是否可以开始一个新动画并在调整大小期间实际运行它?

4

2 回答 2

2

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

如果您可以在用户拖动时控制运行循环,请使用运行循环模式。这会让它工作。我认为您无法在 CA 方面进行更改。

于 2008-10-14T04:00:09.603 回答
0

这确实不是一个答案,但我建议不要在拖动以调整窗口大小时对任何内容进行动画处理。屏幕已经开始动画了(从窗口移动) - 进一步的动画可能会在视觉上令人困惑和无关紧要。

CoreAnimation 效果最好用于从一种已知状态移动到另一种状态 - 例如,当首选项窗口正在调整大小以配合新窗格的内容时,并且您知道旧大小和新大小,或者当您淡入或淡出对象时(或两者)。在窗口调整大小时做动画会在视觉上造成混乱,并使用户更难专注于获得他们想要的窗口大小。

于 2008-09-28T21:39:52.477 回答