5

CGPathAddEllipseInRectに続くCAKeyframeAnimationを使用して、円に沿ってUIViewをアニメーション化しています。ただし、ビューは、最初に配置されたフレームに関係なく、常に同じ場所から開始するように見えます。パス上のビューの開始位置を調整する方法はありますか?

ありがとう!

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"];
4

2 に答える 2

0

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です)。

于 2011-11-01T14:09:44.003 に答える
0

前の答えは正しくて機能しますが、

CGFloat startVal = M_PI / 2;

それ以外の

NSInteger startVal = M_PI / 2;

そうしないと、M_PIが整数に丸められ、正確な角度を実現できなくなります。PSは、前の回答にコメントする評判が低く、申し訳ありません。

于 2013-12-10T08:47:17.937 に答える