1

my の現在のスケールが であるUIViewとしxます。UIView金額にスケール変換を適用するとします。yつまり、次のようになります。

view.transform = CGAffineTransformScale(view.transform, y, y);

. UIViewスケール変換が発生した後のスケールの値を決定するにはどうすればよいですか(xおよびy? に関して)。

4

3 に答える 3

0

スケーリングは掛け算で合成、並進(移動)は足し算、回転は行列掛け算です。3 つすべてを AffineTransformation (空間の次元より 1 行多い行列) に組み合わせることができます。これらは行列の乗算によって結合されます。2D AffineTransformations は 3x2 または 3x3 の行列であり、追加の列により操作が簡単になります。

編集: より明確な名前を使用: 現在のスケールが currxs、currys で、適用されたスケールが xs,ys の場合、新しいスケールは currxs*xs、currys*ys になります。スケールを適用すると、AffineTransformation に含まれる変換コンポーネントもスケーリングされることに注意してください。これが、適用の順序が重要な理由です。

于 2013-01-08T01:43:46.663 に答える
0

スケール変換は、現在のスケールにスケール y を乗算します。網膜のスケールが 2.0 の場合、その後は y* 2.0 になります。
したがって、x*y が答えです。ただし、x.achsis スケールと y achsis は異なる場合があることを忘れないでください。
スケールの x と y は紛らわしいので、コードで y と x 軸に異なるスケールがある場合は、s1 と s2、または sx, sy を使用することをお勧めします。

于 2013-01-08T01:43:51.603 に答える
0

CGAffineTransformScale のみを使用し、回転などの他の変換を使用しない場合は非常に簡単です。ビュー フレームと境界サイズを使用して、結果のスケール値を計算できます。

float scaleX = view.frame.size.width/view.bounds.size.width;
float scaleY = view.frame.size.height/view.bounds.size.height;
于 2013-01-08T02:27:26.373 に答える