Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cocoa - Core Animation - How to stop proxy animation?

I have an NSWindow which I fade in from invisible to full opacity, over a custom time, using the animator proxy:

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

However, if I attempt to set the window's visibility while the animation is proceeding, the animation is not stopped. In the following example, the window will briefly appear at 0.5 visibility, but will then continue to animate.

e.g.

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

Q. How can I stop the animation?

Thanks.

like image 204
SirRatty Avatar asked Feb 19 '11 03:02

SirRatty


1 Answers

I've got an application that does pretty much this (the menu bar covering window in Shroud) and answering this question I found a bug in it—although my animations are 0.1s so it would probably never be triggered in practice. But thanks. :-)

Animation durations of 0s are special-cased to behave just like setting the alpha value directly, so you can't use them, but you can use a very small duration, something like this, which will create a new animation that supersedes the in-progress one:

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:0.01];
[[myWindow animator] setAlphaValue:0.5];
[NSAnimationContext endGrouping];
like image 70
Nicholas Riley Avatar answered Oct 09 '22 09:10

Nicholas Riley