Cocoa - 核心动画 - 如何停止代理动画?

时间:2011-02-19 03:05:23

标签: cocoa core-animation nswindow

我有一个NSWindow,我使用 animator 代理在自定义时间内从隐形到完全不透明淡入淡出:

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.0f]; // Custom timing, 1 sec.
[[myWindow animator] setAlphaValue: 1.0f];
[NSAnimationContext endGrouping];

但是,如果我尝试设置窗口的可见性动画正在进行,则动画不会停止。在以下示例中,窗口将以0.5的可见度短暂显示,但随后将继续设置动画。

e.g。

[myWindow setAlphaValue: 0.5f];  // Animation continues after calling this.

问。如何停止动画?

感谢。

2 个答案:

答案 0 :(得分:8)

我有一个应用程序几乎完成了这个(Shroud中覆盖窗口的菜单栏)并回答了这个问题我发现了一个错误 - 虽然我的动画是0.1秒所以它可能永远不会是在实践中触发。但是谢谢。 : - )

0s的动画持续时间是特殊的,其行为就像直接设置alpha值一样,所以你不能使用它们,但是你可以使用非常小的持续时间,就像这样,这将创建一个取代的新动画正在进行中的一个:

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.01];
[[myWindow animator] setAlphaValue:0.5];
[NSAnimationContext endGrouping];

答案 1 :(得分:0)

另一种方法是通过设置animations属性来提供具有CABasicAnimation属性的自定义动画类(例如delegate)。然后可以使用相应的delegate methods来跟踪和操纵实际的动画。