经过多次方向改变后,变形的UIView框架陷入困境

时间:2017-04-20 15:07:52

标签: ios iphone uiimageview autolayout uiinterfaceorientation

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

  • 使用标识转换设置UIImageView
  • 设置视图转换,以便缩放捏合手势
  • 将手机从纵向旋转到风景
  • 将新变换应用于视图以缩放图像中的其他点
  • 将手机从横向旋转为纵向
  • 将转换设置回身份

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

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

1 个答案:

答案 0 :(得分:2)

变换不会改变视图的边界;它们在计算自动布局后应用。转换应该用于动画之类的短暂事物,而不是用于定位和调整UI的大小(例如,这也会为你提供像panGestureRecognizer这样的东西的错误坐标。)

我认为你最好把你的imageView放到UIScrollView中,而不是搞乱转换。 UIScrollView已经处理了平移和缩放以进行缩放,因此您只需处理scrollViewDidZoom并相应地调整约束。 here is an example