Свойства CAGradientLayer не анимируются в анимационном блоке UIView
У меня такое ощущение, что я упускаю из виду нечто элементарное, но что может быть лучше, чем ошибиться в Интернете?
У меня довольно простой пользовательский интерфейс. Мнение для моегоUIViewController
это подкласс которого+layerClass
являетсяCAGradientLayer
, В зависимости от действий пользователя, мне нужно переместить некоторые элементы пользовательского интерфейса и изменить значения градиента фона. Код выглядит примерно так:
[UIView animateWithDuration:0.3 animations:^{
self.subview1.frame = CGRectMake(...);
self.subview2.frame = CGRectMake(...);
self.subview2.alpha = 0;
NSArray* newColors = [NSArray arrayWithObjects:
(id)firstColor.CGColor,
(id)secondColor.CGColor,
nil];
[(CAGradientLayer *)self.layer setColors:newColors];
}];
Проблема в том, что изменения, которые я делаю в этом блоке для подпредставлений, анимируются очень хорошо (материал перемещается и исчезает), но изменение цветов градиента - нет. Это просто поменяется.
В настоящее время,документация говорит этот код Core Animation внутри блока анимации не будет наследовать свойства блока (длительность, замедление и т. д.). Но так ли это, что это вообще не определяет транзакцию анимации? (Смысл документов, похоже, в том, что вы получите анимацию по умолчанию, а у меня ее нет.)
Яимеют использовать явныйCAAnimation
сделать эту работу? (И если да, то почему?)