animationWithKeyPath
с использованием анимированных траекторий , а затем с использованием animationGroup одновременных анимаций
CAAnimationGroup * animationGroup = [CAAnimationGroup animation];
CABasicAnimation * translateX = [CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
translateX.toValue = @(300);
CABasicAnimation * translateY = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
translateY.toValue = @(400);
animationGroup.duration = 4;
animationGroup.beginTime = CACurrentMediaTime() + 3;
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
[animationGroup setAnimations:@[translateX,translateY]];
[self.customView.layer addAnimation:animationGroup forKey:nil];
animationWithKeyPath
с использованием CAValueFunction , существуют все виды типов анимации (такие как перевод, вращение, масштабирование и т. Д., Мы можем использовать их для удобства) , а затем с помощью animationGroup одновременная анимация
CAAnimationGroup * animationGroup = [CAAnimationGroup animation];
CABasicAnimation * translateX = [CABasicAnimation animationWithKeyPath:@"transform"];
translateX.valueFunction = [CAValueFunction functionWithName:kCAValueFunctionTranslateX];
translateX.toValue = @(300);
CABasicAnimation * translateY = [CABasicAnimation animationWithKeyPath:@"transform"];
translateY.valueFunction = [CAValueFunction functionWithName:kCAValueFunctionTranslateY];
translateY.toValue = @(400);
animationGroup.duration = 4;
animationGroup.beginTime = CACurrentMediaTime() + 3;
animationGroup.removedOnCompletion = NO;
animationGroup.fillMode = kCAFillModeForwards;
[animationGroup setAnimations:@[translateX,translateY]];
[self.customView.layer addAnimation:animationGroup forKey:nil];
Я попробовал описанные выше двумя способами , создав анимацию , которая translateX одновременно translateY , поэтому ожидаемая анимация будет composition animation
, но только первый метод может работать хорошо, а второй - только завершить последнюю анимацию в группе, мне просто интересно