仅将CGAffineTransform的scale组件应用于UIView

时间:2013-07-17 14:11:23

标签: ios uiview uikit cgaffinetransform

我有一个UIView,其中应用了各种比例和旋转CGAffineTransforms,以响应触摸屏手势。

当缩放操作完成时,我想将视图的边界调整为新的大小,然后让视图以1.0的比例重新绘制自己,同时保持变换的所有其他组件相同。

要调整视图的边界,我正在使用:

self.myView.bounds = CGRectApplyAffineTransform(self.myView.bounds, self.myView.transform);

要“撤消”缩放变换,我正在尝试这个:

self.myView.transform = CGAffineTransformConcat(self.myView.transform, CGAffineTransformMakeScale(1, 1));

然后调用[myView setNeedsDisplay]让视图重绘自己。

然而,这不会产生预期的结果,并且当应用旋转变换时,上面的代码似乎也会导致看起来像侧向平移变换的应用。

“撤消”只是缩放变换的最简洁方法是什么?让视图以1:1重绘,所有其他变换保持不变?

2 个答案:

答案 0 :(得分:0)

我正在处理类似的事情,而我所做的是将单独的组件存储在另一个结构中(缩放,旋转,平移)。这样您就可以轻松地重新创建转换(但要注意操作的顺序)。

但有一件事:我建议您不要更改边界,而只是对变换进行缩放操作。这将避免一些潜在的不必要的布局。所有这些东西都可以用transform属性完全处理。你现在这样做的方式不会改变任何东西,因为应用1的标度是无操作。如果将视图按比例放大2,则需要缩放0.5才能恢复到原始视图。或者,正如我上面所说,存储所有组件并从单位矩阵重新创建它(矩阵数学很快,不用担心)。

答案 1 :(得分:0)

将您的比例值保存在变量中,然后尝试将CGAffineTransformMakeScale(1,1)更改为

CGAffineTransformMakeScale(1/totalScaleWidth, 1/totalScaleHeight)