1

CGAffineTransformsいくつかのとを使用してアニメーションをつなぎ合わせようとしていますCGAffineTransformConcats。私が達成しようとしている全体的な目標は、画像を45度回転させながら、50ピクセル上に移動してから、下に戻る途中でさらに45度回転させることです。

 CGAffineTransform translateUp = CGAffineTransformMakeTranslation(0, -50);
    CGAffineTransform firstSpin = CGAffineTransformMakeRotation(M_PI_4);
    CGAffineTransform translateDown = CGAffineTransformMakeTranslation(0, 50);
    CGAffineTransform secondSpin = CGAffineTransformMakeRotation(M_PI_4);
    CGAffineTransform transform1 =  CGAffineTransformConcat(translateUp, firstSpin);
    CGAffineTransform transform2 =  CGAffineTransformConcat(translateDown, secondSpin);
    CGAffineTransform transformFull =  CGAffineTransformConcat(transform1, transform2);    
    [UIView beginAnimations:@"MoveAndRotate" context:nil];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:0.5];
    mainCharacterImage.transform = transformFull;
    [UIView commitAnimations];

さて、私はCGに関連するすべてのものにかなり慣れていないのですが、なぜこれが機能しないのかわかりません。

しかし、これが奇妙な部分として機能していないという事実ではないと思います。私の質問は主に、上記のコードによって画像が上下に移動するだけでなく、移動する理由を誰かに説明できますか?右に約100ピクセル?

どんな提案でも大歓迎です!

4

1 に答える 1

5

transformFullこれは、((translateUp * firstSpin)*(translateDown * secondSpin))の行列乗算の結果であるためです。アニメーションは、開始点からこの行列の乗算を計算した結果に直接移動します。これはたまたま次のようになります。

0, 1, 0
-1, 0, 0
50 - 25 * sqrt(2), 25 * sqrt(2), 1

この変換行列は、たまたまアイテムを約100ピクセル右に移動します。

変換行列には履歴がありません。どのステップがその値に到達したかを判断できず、それらのステップを移動します。代わりに、意図的に各ステップに移動する必要があります。このアニメーションを2段階で実行してみてください。に移動mainCharacterImagetransform1ます。次に、π/2の回転だけである新しい変換に移動します。

于 2012-04-19T14:13:20.127 に答える