Я использовал CAKeyframeAnimations для анимации свойств слоя transform.rotation
и transform.translation.x
, но у меня проблемы с анимацией свойство преобразовать
неявно. У меня есть слой, который должен анимироваться между двумя состояниями, а интерполяция по умолчанию CABasicAnimation полностью неверна и не следует по пути, который я хочу. CAKeyframeAnimation спешит на помощь, по крайней мере, я так подумал. Любая попытка анимировать преобразование
с использованием CAKeyframeAnimation приводит к немедленной привязке вида к окончательному преобразованию, в то время как другие анимации выполняются. Если я удалю первую половину следующей функции и позволю моим событиям «преобразования» использовать CABasicAnimation внизу, она будет анимироваться отлично, хотя и с некорректно интерполированными преобразованиями.
Мой делегат уровня реализовал следующее:
- (id <CAAction>) actionForLayer:(CALayer *)layer forKey:(NSString *)event
{
if ([event isEqualToString:@"transform"])
{
CGSize startSize = ((CALayer *)self.layer.presentationLayer).bounds.size;
CGSize endSize = self.layer.bounds.size;
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:event];
animation.duration = 0.25;
NSMutableArray *values = [NSMutableArray array];
int stepCount = 10;
for (int i = 0; i < stepCount; i++)
{
CGFloat p = i / (float)(stepCount - 1);
CGSize size = [self interpolateBetweenSize:startSize andSize:endSize percentage:p];
CATransform3D transform = [self transformForSize:size];
[values addObject:[NSValue valueWithCATransform3D:transform]];
}
animation.values = values;
return animation;
}
// All other animations use this basic animation
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:event];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeForwards;
animation.duration = 0.25;
return animation;
}
Мое преобразование - это перевод, за которым следует поворот, но я думаю, что групповая анимация с отдельными анимациями по ключевым кадрам, анимируемыми посредством перевода и поворота, приведет к безумному городу. Я подтвердил, что размер и преобразование верны для всех значений p, которые я передаю, а p строго колеблется от 0 до 1.
Я пробовал установить нестандартную временную функцию, я пробовал установить массив временных функций, я пропустил keyTImes, я установил repeatCount равным 0, removeOnCompletion = YES и fillMode равным нападающие, и это не имело никакого эффекта. Я неправильно создаю анимацию ключевого кадра преобразования?