2014-09-03 79 views
1

所以我做上NSButton一個簡單的動畫,我發現hereNSButton被修剪與CAAnimation

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」按鈕(也被動畫的一個),影子/錐被修剪/右側切斷。

我認爲這可能是一個clipsToBounds的事情,但按鈕或圖層都沒有這樣的屬性(也許它只是一個iOS的東西,我的背景是)?

任何想法/解決方案,將不勝感激:)

+0

它肯定看起來裁剪 - 它只是一個按鈕被剪裁?如果是這樣,請嘗試複製其他按鈕之一,並用副本替換出現故障的按鈕。 – 2014-09-03 03:54:32

+0

所有的按鈕都被剪裁:/ – 2014-09-03 04:28:07

+2

也許如果你發佈你的項目(或其基本形式),可以有一個更好的看看。 – 2014-09-04 02:16:55

回答

1

我可以在我的項目中解決這個問題,方法是在IB中選擇視圖,然後轉到「視圖效果檢查器」並勾選「核心動畫層」下的複選框,從而爲按鈕超級視圖指定自己的CALayer。我相信你可以通過編程的方式來完成這項工作,但我不確定這個圖層是「備份」還是「託管」編輯:根據this post它是層支持FYI。

我們的設置之間可能存在一些其他的主要差異,所以如果這可以讓你知道,我會研究它。

這也許無關緊要,但我使用CABasicAnimation代替CAKeyFrameAnimation

+1

完美。訣竅是在持有按鈕的視圖上更改該設置。謝謝! – 2014-09-17 02:25:34

+1

@SamJarman是的,多數民衆贊成在什麼意思'超視圖',對不起,如果不清楚。很高興它對你有效;不幸的是,CoreAnimation有很多奇怪的gottchas:/ – 2014-09-17 03:20:53

0

動畫被限制爲CALayer的,這是由該視圖中定義的邊界。所以當圖像移動到Button的視圖邊界之外時會發生剪切。有可能是一個更聰明的方法,但嵌入NSButton在一個稍大的NSView和搖動該視圖似乎工作。