【问题标题】:NSButton being clipped with CAAnimationNSButton 被 CAAnimation 剪辑
【发布时间】:2014-09-03 02:30:24
【问题描述】:

所以我在 NSButton 上做一个简单的动画,我发现 here

button.wantsLayer = YES;
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
animation.keyPath = @"position.x";
animation.values = @[ @0, @10, @-10, @10, @0 ];
animation.keyTimes = @[ @0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1 ];
animation.duration = 0.5;
animation.additive = YES;
[button.layer addAnimation:animation forKey:@"shake"];

除了,当它左右摆动时,它会被剪掉(这有点难以截图,所以这里是)

您可以看到,在“2”按钮(正在制作动画的那个)的右侧,阴影/斜角正在被剪裁/切断。

我认为这可能是一个 clipsToBounds 的东西,但按钮或图层都没有这样的属性(也许它是 iOS 唯一的东西,我的背景在哪里)?

任何想法/解决方案将不胜感激:)

【问题讨论】:

  • 它看起来确实被剪掉了——它只是被剪掉的一个按钮吗?如果是这样,请尝试复制其他按钮之一并将有问题的按钮替换为副本。
  • 所有按钮都被剪掉了:/
  • 也许如果您发布您的项目(或项目的基本形式),有人可以更好地查看。
  • 是的,Sam,有一个演示项目吗?

标签: macos calayer nsbutton caanimation


【解决方案1】:

我能够通过在 IB 中选择视图然后转到“View Effects Inspector”并选中“Core Animation Layer”下的复选框来为按钮超级视图提供自己的CALayer,从而在我的项目中解决了这个问题.我确定您可以通过编程方式执行此操作,但我不确定该层是“支持”还是“托管”编辑:根据this post,它是层支持的仅供参考。

我们的设置之间可能存在其他一些关键差异,因此如果您有此锻炼,请告诉我,我会研究一下。

这可能无关紧要,但我使用的是CABasicAnimation 而不是CAKeyFrameAnimation

【讨论】:

  • 完美。诀窍是在持有按钮的视图上更改该设置。谢谢!
  • @SamJarman 是的,这就是superview 的意思,如果不清楚,抱歉。很高兴它对你有效;不幸的是,CoreAnimation 有很多像这样的奇怪问题:/
【解决方案2】:

动画被限制在由视图定义的 CALayer 的边界内。因此,当图像超出 Button 的视图边界时,就会发生剪切。可能有一种更聪明的方法,但将 NSButton 嵌入到稍大的 NSView 中并摇动该视图似乎可行。

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2020-08-25
    • 2016-09-18
    • 1970-01-01
    • 2018-02-19
    • 2023-03-06
    相关资源
    最近更新 更多