多个方向更改后转换后的 UIView 框架混乱

Frame of transformed UIView mess up after multiple orientation changes

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

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

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

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

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