我有一个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的比例重新绘制,而所有其他变换保持不变?
发布于 2013-07-17 22:22:15
我正在处理类似的事情,我所做的是将单独的组件存储在另一个结构中(缩放、旋转、平移)。这样,您就可以轻松地再次重新创建转换(不过要注意操作的顺序)。
但有一件事:我建议你不要改变界限,而只是对变换应用一个缩放操作。这将避免一些潜在的不必要的布局。所有这些东西都可以完全用transform属性来处理。你现在做的方式不会改变任何事情,因为应用1的尺度是没有意义的。如果将视图放大2倍,则需要缩放0.5倍才能返回到原始视图。或者,正如我上面所说的,存储所有组件并从单位矩阵重新创建它(矩阵数学很快,不用担心)。
发布于 2013-07-18 13:09:48
将比例值保存在变量中,然后尝试将CGAffineTransformMakeScale(1,1)更改为
CGAffineTransformMakeScale(1/totalScaleWidth, 1/totalScaleHeight)https://stackoverflow.com/questions/17702120
复制相似问题