1

私は、複数の文字列をCGAffineTransformsCGAffineTransformConcatsを使って一緒にストリングしようとしています。私が達成しようとしている全体的な目標は、画像を45度回転させながら50ピクセル上に移動し、次に45度回転させて戻すことです。CGAffineTransformを使った奇妙な結果

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ピクセル移動しますか?

どのようなご提案も大変ありがとうございます。

答えて

5

transformFullは((translateUp * firstSpin)*(translateDown * secondSpin))の行列乗算の結果です。あなたのアニメーションがあることを起こる、この行列積を計算した結果に開始点から直接行く:

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

この変換行列はちょうど右に100個のピクセルについての項目を移動するために起こります。

変換マトリックスには履歴はありません。それはどのようなステップがその価値に達しているかを知ることはできず、それらのステップを進めることもできません。代わりに、意図的に各ステップに移動する必要があります。このアニメーションを2段階で試してみてください。 mainCharacterImagetransform1に移動します。次に、π/ 2の回転だけである新しい変換に移動します。