2011-07-26 6 views
0

Iは、次のようにUIViewの回転だ:回転後にUIViewを一方向にスケーリングするときのスキューを防止するにはどうすればよいですか?

CGAffineTransform currentTransform = [gestureRecognizer view].transform;  
CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation); 
[[gestureRecognizer view] setTransform:newTransform]; 

及びIは回転後、このビューの一つの寸法(幅または高さ)を縮小したいです。しかし、私が次のことをすれば:

CGAffineTransformScale(self.parent.parentWidget.transform,sX, 1); 

私は歪んだビューになります。これを防止し、回転後に1つのディメンションをサイズ変更できるようにするにはどうすればよいですか?

これは、Keynoteで要素を回転し、回転後に選択ハンドルを1つ取り、その要素のサイズをその方向に変更することができる例です。

答えて

2

あなたの変換。回転させた後にビューを1次元で拡大しようとすると、望みの効果が得られません。スケーリングは、元の座標系に基づくのではなく、回転した最後のオブジェクトのXまたはY次元で行われます。

この効果を実現するには、回転の前に拡大/縮小が適用されるトランスフォームを作成し、それをビューに設定する必要があります。これにより、UIViewの回転とスケーリングを追跡する必要があるため、これらの値のいずれかが変更されるたびに新しい変換を再生成することができます。

+0

こんにちはブラッド、あなたの貴重な入力のためにたくさんありがとう。いくつか追加した後、それは私のために働いた。キーはあなたが "回転の前にスケーリングする"と言っていました...。もう一度感謝します。 – MANN

+0

もう1つ関連性の高いもの...私はビューの中央と中央(合計8)で画像のサイズを変更しました。どのように幅を変更するのか、どれが高さ変更を行うのかを決める方法は?あなたは90度の回転幅と高さresizerの後にUIView(20、20、300、200)を持っているように交換を得た! – MANN

0

あなたは

CGAffineTransformScale(self.parent.parentWidget.transform,sX, 1); 

を使用している場合あなたのビューは常に同じ値で、xとyの両方を拡張してみスキューます:あなたの問題はあなたが適用される順序の一つである

​​
+0

あなたのお返事ありがとうございました....しかし私のシナリオでは、私はちょうど幅を縮尺したいと思っています。 – MANN

関連する問題