NSButton被CAAnimation剪裁

时间:2014-09-03 02:30:25

标签: macos calayer nsbutton caanimation

所以我在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"];

除此之外,当它左右摆动时,它会被剪裁(这有点难以截屏,所以这里有)

enter image description here

您可以在“2”按钮(正在设置动画的按钮)的右侧看到正在剪切/剪切阴影/斜角。

我认为这可能是一个clipToBounds的东西,但是按钮或图层都没有这样的属性(也许它只是iOS的东西,我的背景是什么)?

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

2 个答案:

答案 0 :(得分:1)

我能够通过在IB中选择视图然后转到“视图效果检查器”并选中“核心动画”下的复选框,在按钮超级视图中为自己的CALayer解决此问题。层”。我确定你可以通过编程方式执行此操作,但我不确定该图层是“支持”还是“托管”。根据{{​​3}} 修改,它是图层支持的FYI。

我们的设置之间可能还有其他一些重要的区别,所以如果这次锻炼你告诉我,我会调查它。

这可能无关紧要,但我使用CABasicAnimation代替CAKeyFrameAnimation

答案 1 :(得分:0)

动画仅限于CALayer的边界,CALayer由视图定义。因此,当图像移动超出Button视图的边界时,会发生剪切。可能有一种更聪明的方法,但是将NSButton嵌入到稍微大一点的NSView中并且摇动该视图似乎也有效。