2014-09-03 7 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» (тот, который анимируемый), тень/скос обрезаемых/отрезан.

Я думал, что это может быть clipBoogle, но ни кнопка, ни слой не имеют такого свойства (возможно, это единственная вещь iOS, где мой фон)?

Любые идеи/решения будут оценены :)

+0

Это определенно выглядит обрезанный - это только одна кнопка, которая обрезается? Если да, попробуйте дублировать одну из других кнопок и замените неисправную копию. –

+0

Все кнопки обрезаны:/ –

+2

Возможно, если вы разместите свой проект (или его базовую форму), кто-то сможет лучше посмотреть. –

ответ

1

Я смог решить эту проблему в своем проекте, предоставив кнопке super view свой собственный CALayer, выбрав вид в IB, затем перейдите в «View Effects Inspector» и отметьте галочку в поле «Core Animation Layer». Я уверен, что вы могли бы сделать это программно, но Я не уверен, что этот слой «поддерживается» или «размещен». Редактировать: в соответствии с this post это слой с поддержкой FYI.

Между нашими установками могут быть некоторые другие ключевые отличия, поэтому, если эта тренировка doenst вы дадите мне знать, и я рассмотрю ее.

Это, вероятно, не имеет значения, но я использую CABasicAnimation вместо CAKeyFrameAnimation

+1

Идеально. Трюк состоял в том, чтобы изменить эту настройку на вид, который удерживал кнопки. Благодаря! –

+1

@SamJarman да, это то, что подразумевалось под 'superiew', извините, если это не было ясно. Рад, что это сработало для вас; есть много нечетных gottchas, подобных этому с CoreAnimation, к сожалению: / –

0

анимации ограничиваются пределами CALayer, которая определяется видом. Таким образом, отсечение происходит, когда изображение перемещается за пределы представления Button. Вероятно, есть более умный способ, но встраивание NSButton в несколько больший NSView и тряска этого представления, похоже, работает.