2013-04-22 2 views
5

Я оживляю CALayer с помощью CABasicAnimation и ожидаю, что слой останется в позиции, когда анимация завершится. Почти все решения показывают следующее, что работает отличноПравильный способ предотвращения исчезновения слоя в CABasicAnimation?

animation.removedOnCompletion = NO; 
animation.fillMode = kCAFillModeForwards; 

Однако, WWDC динамик в Core Animation на практике Часть 1 2010 (~ 38-41mins) говорит, что большинство решений исчезающего слоя Обнаруженного " фальшивка»и правильный способ оживить слой, примерно следующее

animation.fromValue = [NSNumber numberWithFloat:layer.position.y]; 
layer.position = CGPointMake(layer.position.y, endPoint); 
animation.toValue = [NSNumber numberWithFloat:endPoint]; 

в качестве причины в том, что решение removedOnCompletion/FILLMODE только замораживает слой представления, и фактический слой все еще имеет свой оригинальный набор позиций.

Пожалуйста, исправьте меня, если я неверно истолковал динамик.

Если я правильно понял его, когда это имеет значение?

Thanks, Steve

ответ

2

Это зависит от того, что вы хотите сделать ... Ваше собственное объяснение кажется довольно ясным.

Если вы только анимируете свойства без изменения фактического значения, то «то, что вы видите» на самом деле отличается от «что есть». Большую часть времени вы этого не хотите. (И когда вы используете анимацию UIView, или CALayer неявные анимации, «что есть» и «что вы видите» синхронизированы, что согласуется с синтаксисом прямого сеттера).

Но в некоторых случаях может быть полезно сохранить фактическое значение и временно отображать что-то другое на экране ... пока вы знаете, что делаете!

+0

Спасибо за ответ - извините, мой здесь был немного медленным. Возможно, я никогда не сталкивался с необходимостью сделать что-то еще с уровнем презентации или фактическим слоем, поэтому я боролся с этими двумя методами. Еще раз спасибо. Стив – Steve

1

Вы понимаете это правильно.

Это означает, что когда вы выполняете анимацию на слое, создается «специальный» слой, называемый «слой представления», и анимация фактически имела место на нем, но фактический уровень не изменяется. Фактически вы ДОЛЖНЫ установить свойство на слой в конце анимации, чтобы «синхронизировать» слой с окончательным статусом анимации.