0

次の方法で UIView を回転させています。

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

回転後にこのビューの 1 つのディメンション (幅または高さ) をスケーリングしたいと思います。ただし、次のようにすると:

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

偏った見方になってしまいます。これを防ぎ、回転後に 1 つのディメンションのサイズを変更できるようにするにはどうすればよいですか?

実際のこの例は Keynote で、要素を回転させ、回転後に 1 つの選択ハンドルをつかみ、その要素のサイズをちょうどその方向に変更できます。

4

2 に答える 2

2

あなたの問題は、変換を適用する順序の 1 つです。回転後にビューを 1 次元でスケーリングしようとすると、目的の効果が得られません。スケーリングは、元の座標系ではなく、最終的に回転したオブジェクトの X または Y 次元で行われます。

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

于 2011-07-26T20:40:09.753 に答える
0

使用すると、ビューが常に歪む

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

x と y の両方を同じ値でスケーリングしてみてください。

CGAffineTransformScale(self.parent.parentWidget.transform,sX, sX);
于 2011-07-26T11:46:59.080 に答える