Установить начальную точку для CGAffineTransform - PullRequest
5 голосов
/ 23 января 2011

Я анимирую UIView вдоль круга с помощью CAKeyframeAnimation, которая следует за CGPathAddEllipseInRect. Однако вид всегда начинается с одного и того же места, независимо от того, в каком кадре он изначально расположен. Есть ли способ отрегулировать начальную позицию вида на пути?

Спасибо!

CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
myAnimation.fillMode = kCAFillModeForwards;
myAnimation.repeatCount = 5;
myAnimation.calculationMode = kCAAnimationPaced;
myAnimation.duration = 10.0;

CGMutablePathRef animationPath = CGPathCreateMutable();

CGPathAddEllipseInRect(animationPath, NULL, rect);

myAnimation.path = animationPath;
CGPathRelease(animationPath);

[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"];

Ответы [ 2 ]

0 голосов
/ 10 декабря 2013

Предыдущий ответ правильный и работает, но должно быть

CGFloat startVal = M_PI / 2;

вместо

NSInteger startVal = M_PI / 2;

В противном случае M_PI будет округлено до целого числа, и вы не сможетедостичь точного угла.PS имеет низкую репутацию, чтобы комментировать предыдущий ответ, извините.

0 голосов
/ 01 ноября 2011

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

вместо использования: CGPathAddEllipseInRect , вы должны использовать: CGPathAddArc! Например:

CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
myAnimation.fillMode = kCAFillModeForwards;
myAnimation.repeatCount = 5;
myAnimation.calculationMode = kCAAnimationPaced;
myAnimation.duration = 10.0;

CGMutablePathRef animationPath = CGPathCreateMutable();

NSInteger startVal = M_PI / 2;

//seventh value (end point) must be always 2*M_PI bigger for a full circle rotation
CCGPathAddArc(animationPath, NULL, 100, 100, 100,  startVal, startVal + 2*M_PI, NO); 

myAnimation.path = animationPath;
CGPathRelease(animationPath);

[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"];

повернет полный круг, начиная снизу - по часовой стрелке.Измените значение startVal, чтобы изменить начальную позицию вращения.(полный оборот 2 * M_PI).

...