【问题标题】:UIView: how to "reset" transformations. CGAffineTransformScale not working as I would expectUIView:如何“重置”转换。 CGAffineTransformScale 没有像我预期的那样工作
【发布时间】:2012-12-22 08:50:32
【问题描述】:

我认为我的问题可以概括为如何存储和重置视图的转换。但是也许解释我的情况可能会有所帮助。

如果我将下面的变换一个接一个地应用到视图中(就像我将此代码添加到开关或按钮)。我得到了我所期望的结果:比例在:原始视图大小的 0.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 灵活边距使视图居中,而不是使用自动布局。或许我应该用另一种计算方式使视图居中?

感谢阅读!

【问题讨论】:

  • 您可以设置someView.transform = CGAffineTransformIdentity; 将其重置为无转换。更容易理解。
  • 谢谢,但即使这样我得到了奇怪的结果。
  • 您知道应用非恒等变换时帧是假的吧?来自 UIView 上框架的文档:“警告:如果变换属性不是身份变换,则该属性的值未定义,因此应被忽略。”
  • 大卫 - 你能澄清你的说法吗?这是否意味着转换必须与“原始”相反才能使帧准确(这意味着多次/堆叠转换会产生不好的结果?我也在处理多次转换并得到不寻常的结果。) >

标签: ios uiview autoresize cgaffinetransformscale


【解决方案1】:

我这样做了,效果很好。

self.imageview.transform = CGAffineTransformIdentity

【讨论】:

  • 如果您通过滑动视图取消了该视图并不能恢复为原始视图
【解决方案2】:

(1) 一定不要在应用转换后设置或获取任何帧数据,它不受支持并且会产生不可预知的结果;

(2) 像这样关闭自动调整蒙版弹性边距和居中:

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

(注意在视图处于全尺寸时应用居中。即,如果是调整大小变换,则在变换之前,如果是恒等变换,则在变换之后)

【讨论】:

  • 谢谢!很好,米勒时间。
猜你喜欢
  • 2013-01-03
  • 2016-06-19
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多