我有一些我正在动画的 NSView 子类(更改帧和alpha值)。有时我需要停止动画,但是我一直在收到错误
这是一段代码:
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[textView.animator setFrame:frame];
[textView.animator setAlphaValue:0.0];
[NSAnimationContext endGrouping];
if ([textView.animator isAnimating]) { // Here the exception is raised
NSLog(@"%@ is animating!", textView);
}
我打算致电[textView.animator isAnimating]
,但这只是给了我
Exception detected while handling key input.
*** -[NSProxy doesNotRecognizeSelector:isAnimating] called!
代码示例项目位于https://bitbucket.org/lukaszb/animationartifacts/src/0dc41660f26dd3b629c28bbbda6eb647
我可以在我的isAnimating
子类中添加一些NSView
属性,并在动画开始和完成处理程序中设置它,但是这也可能导致一些竞争条件问题。
有人可以帮我查看视图是否正在动画化吗?
答案 0 :(得分:0)
NSView
及其动画制作者都没有属性animating
,因此您无法只查询该值。
但是,正如您所建议的那样,您可以为此目的定义自己的属性。诀窍是在动画完成后将其设置回NO
,您可以使用当前动画上下文中的completionHandler
属性来执行此操作:
[NSAnimationContext beginGrouping];
[NSAnimationContext currentContext].completionHandler = ^{ self.animating = NO; };
// ... set up your animation ...
[NSAnimationContext endGrouping];
请注意,在主线程上调用该块(如文档中所示),因此只要始终在主线程上设置animating
属性,它就会确保状态一致。由于您正在处理UI代码,情况可能就是这样。