Не так уж сложно создать анимацию для перемещения объекта по пути.Например, следующий код будет анимирован вдоль определенной кривой Безье:
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.duration = 1.0f;
pathAnimation.calculationMode = kCAAnimationPaced;
CGPoint currentPosition = viewToAnimate.layer.position;
CGPoint endPoint = CGPointMake(currentPosition.x + 100.0f, currentPosition.y - 50.0f);
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, currentPosition.x, currentPosition.y);
CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, currentPosition.y, endPoint.x, currentPosition.y, endPoint.x, endPoint.y);
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
[viewToAnimate.layer addAnimation:pathAnimation forKey:@"animateMovementUsingPath"];
В центральной части этого кода указан путь.В этом случае я начинаю рисовать с currentPosition
, затем добавляю кривую, которая заканчивается на endPoint
.Контрольными точками для этой кривой являются (endPoint.x, currentPosition.y)
и (endPoint.x, currentPosition.y)
.
Будет намного проще определить векторную кривую таким образом и позволить Core Animation обрабатывать все анимации для вас, чем управлять всемианимация себя.