UIView:如何"重置"转换.CGAffineTransformScale无法正常工作

Mrw*_*lfy 9 uiview autoresize ios cgaffinetransformscale

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

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

//tranformScale 1
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.55, 0.55 );
//tranformScale 2
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0 );
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢阅读!

nit*_*ddy 32

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

self.imageview.transform = CGAffineTransformIdentity
Run Code Online (Sandbox Code Playgroud)

  • 谢谢 - 对我来说也很完美! (3认同)

fou*_*dry 6

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

(2)关闭你的autoresizing mask flex margin和center如下:

   view.center = CGPointMake(view.superview.bounds.size.width/2, 
                             view.superview.bounds.size.height/2);
Run Code Online (Sandbox Code Playgroud)

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