【问题标题】:Layer-backed NSView animation图层支持的 NSView 动画
【发布时间】:2013-03-23 20:26:04
【问题描述】:

我有一个我想要动画的 NSView,但是 NSView 里面有一个 NSTableView,当视图是图层支持时,它不会显示 correclty(这反过来又是动画视图所必需的)。所以我的答案是在动画之前让视图层支持,然后在动画完成后移除层,如下所示:

[animatingView setWantsLayer: YES];

[NSAnimationContext beginGrouping];

[[animatingView animator] animateSomething];

[[NSAnimationContext currentContext] setCompletionHandler: ^{
    [animatingView setWantsLayer: NO];
}];

[NSAnimationContext endGrouping];

但是,使用此代码,视图根本没有动画。我发现如果我删除 [animatingView setWantsLayer: NO]; 行,它的动画效果恰到好处,但是表格视图无法正确显示(有关其中一个问题的示例,请参阅 this 问题)。

所以,我的问题是:我该如何解决这个问题?我想为视图设置动画,但我希望表格正确显示,但这种解决方法不起作用。我不明白为什么......

【问题讨论】:

    标签: objective-c cocoa core-animation nstableview


    【解决方案1】:

    一旦你让 NSView 支持图层,它就无法恢复。

    我建议你尝试让你的 NSTableView 成为 layer-backed view 的兄弟,而不是孩子。

    【讨论】:

    • 但是视图必须包含表格,这就是想法。该视图包含表格、一些按钮和一些文本字段,我想同时为它们设置动画,但不能一个一个地为它们设置动画。
    • @Alex 我同意。但不幸的是,您刚刚遇到了一个错误,您需要找到解决方法。你必须破解你的 NSTableView 才能在 layer-backed superview 上正常工作,或者破解动画过程。
    • 嗯,当然,你说得有道理。还有一点我不明白:为什么上面的代码没有产生动画?我的意思是,我将视图设置为图层支持,然后我对其进行动画处理,最后我将其设置为不支持图层,但这对你没有任何作用,所以为什么它没有动画吗?就像我在问题中所说的那样,如果我在完成处理程序中删除它动画的行,那么该行似乎确实有所作为。怎么会?
    • @Alex 你应该在添加动画之前设置完成块。
    • 我发现我想做的事情是可能的。在Finder的设置窗口上,第三个选项卡上有一个表视图,它在选择第三选项卡时动画(逐渐消失)。请参阅此动画 gif:goo.gl/hny1C 请注意,与动画后相比,动画时表格的背景如何。源列表类型表视图的错误(重复)渐变表明该表是图层支持的。所以它是层支持动画(当然)。但随后渐变恢复正常!所以它在动画之后不是 layer-backed。我怎样才能重现这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多