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