Как я могу связать и сгруппировать Core Animations для разных объектов? - PullRequest
2 голосов
/ 28 января 2012

Скажем, у меня есть 3 CALayers (квадраты, разных цветов, для примера).И я хочу выполнить следующую анимацию:

layer1 одновременно переводит и масштабирует из положения A в положение B.

Как только layer1 находится в своей новой позиции и имеет новый размер, layer2 и 3 одновременнопереведите из позиций C и D в позиции E и F соответственно.Эти слои (2 и 3) также постепенно исчезают при переводе в E и F. Но слой 2 также масштабируется по мере его перевода, а layer3 просто переводит (но с CAKeyframeAnimation, так что, когда он достигает точки F, он делает небольшой эффект оживления вверх-вниз).

  1. Для слоя 1 я могу:

    • создать CABasicAnimation с единственной настройкой длительности, например, равной 1, и добавить ее в layer1для ключа "transform" создайте преобразование масштаба
    • и примените его к слою
  2. Для layer2 то же самое, что и для layer1, но также установите непрозрачность.

  3. Для слоя 3 я бы создал анимацию ключевого кадра.А также установите непрозрачность.

Из вышеперечисленного:

Похоже на вызов layer2 setTransform: затем setOpacity: приводит к одновременной анимации.Но это правильный способ убедиться, что они одновременны, или я должен использовать что-то вроде CAAnimationGroup?

Имеет ли смысл переводить и масштабировать путем объединения матриц?Имеет ли смысл даже использовать матрицы, а не устанавливать позиции?

Как их объединить, чтобы анимация для layer2 и layer3 не начиналась, пока не будет выполнен layer1, а затем произойдет преобразование и непрозрачность layer2одновременно с анимацией ключевых кадров и прозрачности слоя 3?

1 Ответ

2 голосов
/ 28 января 2012

Сегодня я сделал нечто очень похожее ... Я смешивал CGAffineTransform и CABasicAnimations, и это вызвало самую неловкую ошибку ... в любом случае.

, чтобы настроить анимацию для выполнения метода после завершения. Я ужасно уверен, что использовал:

[self performSelector:@selector(animationDone) withObject:nil afterDelay:0.0];

после того, как я закончил создание 3 CABasicAnimations в одном используемом мной методе, CAAnimationGroup для вызова всех 3однажды.После завершения 1-й группы анимаций вызывается метод animationDone для запуска следующего метода последующих анимаций.

также должен был быть осторожен с:

animationObject.fillMode = kCAFillModeForwards; //b/c of object's coordinate changes
animationObject.removedOnCompletion = NO;
...