1

私はCGPathAddEllipseInRect円を描くために使用していて、それをCAKeyframeAnimationで使用しています。私の問題は、アニメーションが常に同じ場所から始まることです。CGAffineTransformを使用して次のことを実行し、別のポイントから開始できると思いました。

CGAffineTransform temp = CGAffineTransformMakeRotation(M_PI / 2);
CGPathAddEllipseInRect(animationPath , &temp, rect);

これが何をしているのかわかりません。実行すると、アニメーションのこの部分も表示されません。画面外で何かをしている。これを理解する助けがあれば素晴らしいでしょう。

4

1 に答える 1

5

回転はデフォルトで原点(0,0)を中心に行われますが、円の中心を中心に回転させたいので、追加の変換を行う必要があります。

float midX = CGRectGetMidX(rect);
float midY = CGRectGetMidY(rect);
CGAffineTransform t = 
    CGAffineTransformConcat(
        CGAffineTransformConcat(
            CGAffineTransformMakeTranslation(-midX, -midY), 
            CGAffineTransformMakeRotation(angle)), 
        CGAffineTransformMakeTranslation(midX, midY));
CGPathAddEllipseInRect(animationPath, &t, rect);

基本的に、これは3つの変換を連鎖させます。最初に、円を原点(0,0)に移動し、次に回転を適用してから、元の位置に戻します。効果を説明するために、少し視覚化してみました。

回転が見やすくするために、円ではなく正方形、90°ではなく45°を選択しましたが、原理は同じです。

于 2011-04-27T02:08:14.783 に答える