1

我有一个 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 重绘视图而所有其他变换保持不变的最简洁方法?

4

2 回答 2

0

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

CGAffineTransformMakeScale(1/totalScaleWidth, 1/totalScaleHeight)
于 2013-07-18T05:09:47.830 回答
0

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

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

于 2013-07-17T14:22:15.383 回答