通过将转换应用于 UIScrollView(包含 UIImageView)而不是 UIImageView 本身来修复它。
仅将转换应用到 UIScrollView 并不能很好地工作。它会将旋转后的图像放在一个较小的视图中,并且缩放不会使用可用的屏幕空间。
我终于设法解决了这个问题,所以这就是方法。
要求
- 全屏图片的水平滚动列表
- 旋转设备不能旋转应用程序,但必须旋转显示的图片
- 必须能够在纵向和横向握持设备时缩放图片
我是如何实现的
一个主 UIScrollView,高度等于屏幕高度,宽度等于屏幕宽度 * 图片数。启用分页。
这个主 UIScrollView 包含每个图片的子视图。每个子视图如下所示:
UIScrollView > UIView > UIImageView
UIScrollView 有屏幕的大小,它的 origin.x 属性对于第一个子视图为 0,并且对于后续的每个 UIScrollView 都随着屏幕宽度而增加。结果是一个主 UIScrollView,所有子 UIScrollView 像这样彼此相邻(没有间距):
┌────────────────────┐
│┌───┐┌───┐┌───┐┌───┐│
││ 1 ││ 2 ││ 3 ││ 4 ││
││ ││ ││ ││ ││
│└───┘└───┘└───┘└───┘│
└────────────────────┘
为了解决旋转问题,UIImageView 不再是 UIScrollView 的直接子视图,而是现在嵌入到容器 UIView 中。
主 UIScrollView 委托的viewForZoomingInScrollView:
方法现在返回可见图片的容器 UIView,因此该容器 UIView 将用于缩放。图像视图的旋转仍然通过setTransform:
使用CGAffineTransformScale
和的动画来完成CGAffineTransformMakeRotation
。
我猜测没有容器 UIView 的实现不起作用,是因为 UIImageView 不能再被主 UIScrollView 转换,而已经应用了转换。