У меня такое чувство, что я упускаю из виду что-то элементарное, но что может быть лучше, чем ошибиться в Интернете?
У меня есть довольно простой UI. Представление для моего 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];
}];
Проблема в том, что изменения, которые я делаю в этом блоке для подвидов, анимируются очень хорошо (вещи перемещаются и исчезают), а изменение цветов градиента - нет. Он просто меняет местами.
Итак, документация действительно говорит, что код базовой анимации в блоке анимации не наследует свойства блока (продолжительность, плавность и т. Д.). Но может ли это вообще не определять транзакцию анимации? (Из документов следует, что вы получите анимацию по умолчанию, а у меня ее нет.)
У меня есть , чтобы использовать явную CAAnimation
, чтобы эта работа работала ? (И если да, то почему?)