my の現在のスケールが であるUIView
としx
ます。UIView
金額にスケール変換を適用するとします。y
つまり、次のようになります。
view.transform = CGAffineTransformScale(view.transform, y, y);
. UIView
スケール変換が発生した後のスケールの値を決定するにはどうすればよいですか(x
およびy
? に関して)。
my の現在のスケールが であるUIView
としx
ます。UIView
金額にスケール変換を適用するとします。y
つまり、次のようになります。
view.transform = CGAffineTransformScale(view.transform, y, y);
. UIView
スケール変換が発生した後のスケールの値を決定するにはどうすればよいですか(x
およびy
? に関して)。
スケーリングは掛け算で合成、並進(移動)は足し算、回転は行列掛け算です。3 つすべてを AffineTransformation (空間の次元より 1 行多い行列) に組み合わせることができます。これらは行列の乗算によって結合されます。2D AffineTransformations は 3x2 または 3x3 の行列であり、追加の列により操作が簡単になります。
編集: より明確な名前を使用: 現在のスケールが currxs、currys で、適用されたスケールが xs,ys の場合、新しいスケールは currxs*xs、currys*ys になります。スケールを適用すると、AffineTransformation に含まれる変換コンポーネントもスケーリングされることに注意してください。これが、適用の順序が重要な理由です。
スケール変換は、現在のスケールにスケール y を乗算します。網膜のスケールが 2.0 の場合、その後は y* 2.0 になります。
したがって、x*y が答えです。ただし、x.achsis スケールと y achsis は異なる場合があることを忘れないでください。
スケールの x と y は紛らわしいので、コードで y と x 軸に異なるスケールがある場合は、s1 と s2、または sx, sy を使用することをお勧めします。
CGAffineTransformScale のみを使用し、回転などの他の変換を使用しない場合は非常に簡単です。ビュー フレームと境界サイズを使用して、結果のスケール値を計算できます。
float scaleX = view.frame.size.width/view.bounds.size.width;
float scaleY = view.frame.size.height/view.bounds.size.height;