iPhone - Как сделать круговой путь для анимации CAKeyframe? - PullRequest
3 голосов
/ 27 сентября 2010

Я пытаюсь создать анимацию ключевого кадра, которая позволяет представлению изображения летать по кругу. Я использую CGPathAddCurveToPoint, чтобы сделать ключевые точки кадра. Проблема в том, что при просмотре изображения всегда используется кратчайший (линейный) маршрут.

Я хотел бы иметь какую-то функцию, которая строит траекторию круга для данного радиуса.

Большое спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 09 октября 2012
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, startPoint.x, startPoint.y);
CGPathAddQuadCurveToPoint(path, NULL,middlePoint.x, middlePoint.y,endPoint.x,endPoint.y);

CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.removedOnCompletion = NO;
pathAnimation.path = path;
[pathAnimation setCalculationMode:kCAAnimationCubic];
[pathAnimation setFillMode:kCAFillModeForwards];
pathAnimation.duration = 2.0;

[viewTobemoved.layer addAnimation:pathAnimation forKey:nil];

Эта анимация использует только одну точку Безье и делает мягкий круг от начальной точки до конечной точки. Если вы хотите точно определить кривую, также определив радиус круга, вы можете обратиться к следующей ссылке

http://blog.shoguniphicus.com/2011/05/19/keyframe-animation-ios-cakeyframeanimation-objective-c/

2 голосов
/ 17 января 2011

Это бы сработало?

  CAKeyframeAnimation* circlePathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"center"];

  CGMutablePathRef circularPath = CGPathCreateMutable();
  CGRect pathRect = ...; // some rect you define. A circle has equal width/height; radius is half the values you specify here
  CGPathAddEllipseInRect(circularPath, NULL, pathRect);
  spinAnimation.path = circularPath;
  CGPathRelease(circularPath);

Вы заметите, что траектория анимации - это свойство центра UIView, которое вы хотите сделать летающим по кругу.

...