Что именно делает fillMode?

В документации особо не говорится о том, что это технически делает.

fadeInAnimation.fillMode = kCAFillModeForwards;

Я действительно не вижу эффекта от этого. У меня есть представление с альфа, установленным на 0,0. Затем я постепенно добавляю его. Но когда я раскомментирую строку о h, ничего не меняется. Такое же поведение. Я хотел бы понять, что на самом деле делает этот fillMode.


person Thanks    schedule 22.07.2009    source источник


Ответы (2)


Из CAMediaTiming протокольная документация:

Определяет, будет ли презентация получателя заморожена или удалена по истечении ее активной продолжительности.

Это определяет, что происходит в конце вашей анимации. По умолчанию для него установлено значение kCAFillModeRemoved, что означает, что изменения анимации отменяются, когда анимация завершается. Если вы переключите его на kCAFillModeForwards, изменения, вызванные анимацией, останутся неизменными.

Обратите внимание, что вам также, вероятно, потребуется установить для свойства removeOnCompletion значение NO, чтобы предотвратить удаление вашей анимации, что сделало бы этот параметр неэффективным.

person Brad Larson    schedule 22.07.2009
comment
Отличное объяснение! Да, у меня для свойства removeOnCompletion установлено значение NO. Вот почему я не вижу изменений в fillMode, верно? Почему это называется fillMode? Итак, внутренне это не что иное, как сохранение новых вычисленных параметров после всех процедур интерполяции анимации? - person Thanks; 22.07.2009
comment
Так зачем removedOnCompletion, если fillMode выполняет свою работу? - person jowie; 10.04.2013
comment
@jowie - предотвращает удаление анимации в целом после ее завершения. FillMode просто фиксирует его в конечном состоянии, но если он настроен на удаление после завершения, параметр fillMode не имеет значения. - person Brad Larson; 12.04.2013
comment
@BradLarson - так зачем вообще нужна опция removedOnCompletion? Я не уверен, почему вам нужны два параметра, чтобы делать одно и то же… - person jowie; 12.04.2013
comment
Будет ли это работать, если я изменю положение своего слоя? Я так не думаю. Не имеет значения, какой у вас fillMode и для параметра removeOnCompletion установлено значение NO. По окончании анимации слой будет в исходном положении. Однако вы не сможете увидеть этот эффект на симуляторе. Используйте устройство. - person devluv; 26.08.2013
comment
@BradLarson Я наткнулся на этот пост, когда искал ответ по этому поводу. Итак, скажите, пожалуйста, почему оба removeOnCompletion и fillMode делают одно и то же? Заранее спасибо. - person Unheilig; 14.03.2014
comment
@unheilig removeOnCompletion удаляет анимацию из слоя после ее завершения. fillMode удаляет ЭФФЕКТ анимации из слоя, когда он завершился. Если вы установите removeOnCompletion = false и оставите fillMode установленным для удаления, анимация все равно будет существовать (хотя и остановлена), но эффект будет отменен (для свойства будет возвращено исходное значение) - person David Berry; 17.04.2014
comment
@ Дэвид Отличное объяснение. . .. Спасибо - person Karan Alangat; 31.10.2014
comment
Он был изменен на CAMediaTimingFillMode.forwards - person Pedro Trujillo; 12.04.2020

позвольте мне дать более ясный ответ: хотя внешне установка свойства fillMode анимации на kCAFillModeForwards (или kCAFillModeBoth) и в то же время установка removedOnCompletion на NO может сохранить ваш слой в его окончательном состоянии после завершения анимации но это использование fillMode не по назначению. и действительно навредите, если у вас есть другая анимация, добавьте к той же keyPath

(кстати, правильный подход к сохранению конечного состояния анимации - это изменить значение свойства, чтобы оно соответствовало последнему кадру анимации.)

что fillMode на самом деле используется в связи с дочерней анимацией в сгруппированной анимации, поэтому вы можете указать конкретную дочернюю анимацию в желаемом состоянии

person dispute    schedule 07.01.2016