UIView:如何“重置”转换。 CGAffineTransformScale无法正常工作

时间:2013-01-08 13:31:03

标签: ios uiview autoresize cgaffinetransformscale

我认为我的问题可以归结为如何存储和重置视图的转换。但随后解释我的情况可能有所帮助。

如果我将下面的变换一个接一个地应用到视图中(就像我将此代码添加到开关或按钮一样)。我得到了我期望的完全结果:比例在:原始视图大小的.55倍的视图和原始比例的视图之间切换。也可以按照我的意愿扩展someView的子视图。广告无限。完善。

//tranformScale 1
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.55, 0.55 );
//tranformScale 2
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0 );

问题是我想使用此代码(或类似代码)在iOS设备进入横向时缩放self.view的子视图,以使子视图适合横向屏幕(并在进入时备份肖像)。它几乎可以工作,但出于某种原因,而不是为被缩放的视图的帧输出圆值(如使用按钮调用变换的测试所发生的那样),会产生逐渐奇怪的值。最终,在大约4次旋转后,子视图飞离屏幕。我怀疑它与self.view改变形状有关,但是当我记录self.view的框架时,它的形状是非常可预测的。

顺便说一下我使用autoresizingMask灵活边距来居中视图,而不是使用自动布局。也许我应该用另一种类型的计算来使视图居中?

感谢阅读!

2 个答案:

答案 0 :(得分:32)

我这样做了,它完美无缺。

self.imageview.transform = CGAffineTransformIdentity

答案 1 :(得分:6)

(1)确保在应用变换后不设置或获取任何帧数据,它不受支持并将产生不可预测的结果;

(2)关闭您的自动调整遮罩弹性边距并居中如下:

   view.center = CGPointMake(view.superview.bounds.size.width/2, 
                             view.superview.bounds.size.height/2);

(当视图处于全尺寸时,请注意应用居中。即,如果是变换变换,则在变换之前,如果是变换,则变换之后)