【问题标题】:Transforming vs changing frames of UIViews?转换与更改 UIView 的框架?
【发布时间】:2015-09-19 02:51:06
【问题描述】:

将平移和缩放转换应用于视图并简单地将它们设置为新框架之间有什么区别?只是可以动画转换,还是需要考虑更多的事情?

我特别考虑在更改设备方向时应更改位置和/或大小的视图。

谢谢

【问题讨论】:

  • 您也可以动画帧变化。我想翻译更容易,因为它们会为您完成所有计算,例如旋转等...有些动画在帧更改时更难完成,因为您需要手动计算

标签: ios uiview orientation transform frame


【解决方案1】:

一个关键点,尤其是在您更改设备方向时,是帧将在旋转后重新计算。在旋转之前设置框架不会影响旋转后的框架。在这种情况下,使用变换可能更有用,因为随后将根据变换属性重新计算帧。 Apple documentation 的一个警告:

警告 如果变换属性不是恒等变换,则该属性的值是未定义的,因此应该被忽略。

我发现设置比例变换通常不会产生我想要的行为;它实际上拉伸了视图,这(取决于视图的设置)可以拉伸视图中的所有图像、按钮等,并使其看起来很糟糕。

通常我真正想要的行为实际上是更改视图上的约束。因为框架是在基于约束旋转后重新计算的,所以这种方法与设备旋转一起使用比简单地改变框架要友好得多。也可以对约束更改进行动画处理。

最后,我最近发现的一些真正有用的东西是,可以为您在界面构建器中创建的约束创建一个出口,因此您仍然可以在界面构建器中布置您的视图,然后以编程方式更改约束。

【讨论】:

    【解决方案2】:

    Frame 描述了视图在 superview 中的大小和相对位置(原点),而 transform 而 CGAffineTransform 是一个 3×3 矩阵,描述了另一个坐标系中的坐标系。详细请参考 CGAffineTransform 的参考资料:

    https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGAffineTransform/#//apple_ref/c/macro/CGAffineTransformMake

    iOS 中最常用的转换视图对象的方法:

    https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGContext/index.html#//apple_ref/c/func/CGContextFlush

    还有一个可能有用的答案:

    IOS view transformation modifies frame?

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      相关资源
      最近更新 更多