14
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeScale(.5,.5);

一度にこれらの作品の1つだけ。変換を保存してから別の変換を適用するにはどうすればよいですか?乾杯

4

3 に答える 3

24

Peter の発言を拡張するには、次のようなコードを使用します。

CGAffineTransform newTransform;
newTransform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformScale(newTransform,.5,.5);

CGAffineTransformMake... 関数は新しい変換を最初から作成し、他の変換は連結されます。ビューとレイヤーには、一度に 1 つの変換しか適用できないため、ビューに複数のスケーリング、回転、および移動効果を一度に作成する方法は次のとおりです。

正しい効果を得るには、変換を連結する順序に注意する必要があります。

于 2009-12-13T15:07:43.263 に答える
10

アップルのドキュメントから:

CGAffineTransformConcat 既存の 2 つのアフィン変換を組み合わせて構築されたアフィン変換行列を返します。

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);

パラメータ t1 最初のアフィン変換。

t2 2 番目のアフィン変換。このアフィン変換は、最初のアフィン変換に連結されます。

戻り値 新しいアフィン変換行列。つまり、t' = t1*t2 です。

考察 連結は、2 つのアフィン変換行列を掛け合わせて結合します。複数の変換の累積効果を含む単一のアフィン変換を作成するために、複数の連結を実行する場合があります。

行列演算は可換ではないことに注意してください。行列を連結する順序は重要です。つまり、行列 t1 を行列 t2 で乗算した結果は、行列 t2 を行列 t1 で乗算した結果と必ずしも同じではありません。

于 2009-12-13T15:10:58.220 に答える
2

一度に動作するのはこれらのうちの 1 つだけです。

そうです、最初のものを2番目のものに置き換えたからです。

変換を保存してから別の変換を適用するにはどうすればよいですか?

それらを連結し、結果の行列をプロパティに割り当てます。

型の変数に変換行列を格納できますCGAffineTransform。これを、より複雑な変換の中間ステップに使用したり、コードをより明確にするために (またはその両方) 使用したりできます。

于 2009-12-13T08:05:18.753 に答える