Свойства CAGradientLayer не анимируются в блоке анимации UIView

У меня такое чувство, что я упускаю из виду что-то элементарное, но что может быть лучше, чем ошибиться в Интернете?

У меня есть довольно простой 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 , чтобы эта работа работала ? (И если да, то почему?)

13
задан Sixten Otto 21 February 2012 в 16:19
поделиться