首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSView.animator isAnimating引发错误

NSView.animator isAnimating引发错误
EN

Stack Overflow用户
提问于 2012-11-06 18:14:57
回答 1查看 618关注 0票数 0

我有一些正在动画的NSView子类(更改框架和alpha值)。有时我需要停止动画,但是我总是出错

这是一个代码:

代码语言:javascript
复制
[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]打电话,但这给了我

代码语言:javascript
复制
Exception detected while handling key input.
*** -[NSProxy doesNotRecognizeSelector:isAnimating] called!

代码的示例项目位于https://bitbucket.org/lukaszb/animationartifacts/src/0dc41660f26dd3b629c28bbbda6eb647

我可能会将一些isAnimating属性添加到我的NSView子类中,并在动画开始和完成处理程序中设置它,但是这也会导致一些争用条件问题。

有人能帮我发现一个视图是否被动画化了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-23 08:55:49

NSView及其动画器都没有属性animating,因此不能只查询该值。

但是,正如您建议的那样,您可以为此目的定义自己的财产。技巧是在动画完成后将其设置为NO,您可以在当前动画上下文中使用completionHandler属性:

代码语言:javascript
复制
[NSAnimationContext beginGrouping];
[NSAnimationContext currentContext].completionHandler = ^{ self.animating = NO; };
// ... set up your animation ...
[NSAnimationContext endGrouping];

注意,该块是在主线程上调用的(如文档中所示),因此,只要始终在主线程上设置animating属性,它将确保状态是一致的。因为您正在处理UI代码,所以可能是这样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13256870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档