【问题标题】:Frame of transformed UIView mess up after multiple orientation changes多次方向更改后,转换后的 UIView 框架混乱
【发布时间】:2017-09-17 07:31:18
【问题描述】:

我有一个带有照片库查看器的应用。在应用程序中,您可以选择一张照片并使用手势缩放和平移照片。我通过更改包含照片的 UIImageView 的仿射变换来做到这一点。该应用程序还支持更改手机方向。在某些情况下,UIImageView 在方向变化时的框架计算似乎是错误的。以下一般会导致帧大小计算错误。

  • 使用身份转换设置 UIImageView
  • 设置视图变换,以便我们围绕捏合手势进行缩放
  • 将手机从纵向旋转到横向
  • 对视图应用新的变换以围绕图像中的不同点进行缩放
  • 将手机从横向旋转到纵向
  • 将转换设置回身份

在此之后,UIImageView 框架与原来的不同,因此图像看起来被缩放了。

UIImageView 的自动调整大小标志是 .flexibleWidth 和 .flexibleHeight。我可以做些什么来避免这种情况。看起来 LayoutSubviews 不能很好地处理缩放的 UIViews。我尝试在 viewWillLayoutSubviews() 中删除比例并在 viewDidLayoutSubviews() 中重新应用,但这没有帮助。

【问题讨论】:

    标签: ios iphone uiimageview autolayout uiinterfaceorientation


    【解决方案1】:

    变换不会改变视图的边界;它们在计算自动布局后应用。变换应该用于动画之类的暂时性事物,而不是用于定位和调整 UI 大小(例如,这也会为您提供不正确的坐标,例如 panGestureRecognizer)。

    我认为你最好将你的 imageView 放入 UIScrollView 而不是弄乱转换。 UIScrollView 已经处理了平移和捏合缩放,所以你所要做的就是处理 scrollViewDidZoom 并相应地调整你的约束。 here is an example.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2014-04-26
      相关资源
      最近更新 更多