如何在旋转后在一个方向上缩放UIView时防止歪斜?

时间:2011-07-26 10:30:14

标签: iphone ios core-graphics cgaffinetransform

我正在以下列方式轮换UIView:

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

我希望在旋转后缩放此视图的一个维度(宽度或高度)。但是,如果我执行以下操作:

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

我的结果是偏斜的。如何防止这种情况并使其在旋转后可以调整一个尺寸?

这个实例的一个例子是在Keynote中,你可以旋转一个元素,然后在旋转之后抓住一个选择手柄并在那个方向上调整该元素的大小。

2 个答案:

答案 0 :(得分:2)

您的问题是您应用转换的顺序之一。如果您在旋转后尝试在一个维度上缩放视图,则无法产生所需的效果。您的缩放将发生在最终旋转对象的X或Y维度上,而不是基于其原始坐标系。

要实现此效果,您需要创建一个在旋转之前应用缩放的变换,然后将其设置为视图。这可能需要您跟踪UIView的旋转和缩放,以便每次其中一个值发生变化时都可以重新生成新变换。

答案 1 :(得分:0)

如果您使用

,您的视图将始终存在偏差
CGAffineTransformScale(self.parent.parentWidget.transform,sX, 1);

尝试将x和y缩放相同的值:

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