我有一些正在动画的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子类中,并在动画开始和完成处理程序中设置它,但是这也会导致一些争用条件问题。
有人能帮我发现一个视图是否被动画化了吗?
发布于 2013-01-23 08:55:49
NSView及其动画器都没有属性animating,因此不能只查询该值。
但是,正如您建议的那样,您可以为此目的定义自己的财产。技巧是在动画完成后将其设置为NO,您可以在当前动画上下文中使用completionHandler属性:
[NSAnimationContext beginGrouping];
[NSAnimationContext currentContext].completionHandler = ^{ self.animating = NO; };
// ... set up your animation ...
[NSAnimationContext endGrouping];注意,该块是在主线程上调用的(如文档中所示),因此,只要始终在主线程上设置animating属性,它将确保状态是一致的。因为您正在处理UI代码,所以可能是这样的。
https://stackoverflow.com/questions/13256870
复制相似问题