我正在使用带有多个UIScrollViews的UIScrollView作为子视图,每个UIScrollView都包含一个UIImageView来显示图片。
应用程序本身仅支持纵向方向,但我确实希望在旋转设备时旋转图像视图(观察UIDeviceOrientationDidChangeNotification)。
使用setTransform:
和CGAffineTransformScale
的动画CGAffineTransformMakeRotation
完成图像视图的旋转。
缩放图像视图是通过从viewForZoomingInScrollView:
返回包含图像视图的滚动视图的图像视图来完成的。
这一切都很有效,除了一件事:当图像视图旋转时,我无法再缩放。调试显示正在调用viewForZoomingInScrollView:
,但scrollViewDidZoom:
不是。
有没有人知道可能导致此问题的原因?
答案 0 :(得分:7)
通过将转换应用于UIScrollView(包含UIImageView)而不是UIImageView本身来修复它。
仅将转换应用于UIScrollView并不能很好地工作。它会将旋转的图像放在较小的视图中,并且缩放不会使用可用的屏幕空间。
我终于设法解决了这个问题,所以这就是方法。
<强>要求强>
我是如何实施的
一个主要的UIScrollView,其高度等于屏幕高度,宽度等于屏幕宽度*图片数。启用分页。
这个主UIScrollView包含每张图片的子视图。每个子视图如下所示:
UIScrollView&gt; UIView&gt;的UIImageView
UIScrollView具有屏幕大小,其origin.x属性对于第一个子视图为0,并随着每个后续UIScrollView的屏幕宽度而增加。结果是一个主UIScrollView,所有子UIScrollViews都是这样的(没有间距):
┌────────────────────┐
│┌───┐┌───┐┌───┐┌───┐│
││ 1 ││ 2 ││ 3 ││ 4 ││
││ ││ ││ ││ ││
│└───┘└───┘└───┘└───┘│
└────────────────────┘
为了解决旋转问题,UIImageView不再是UIScrollView的直接子视图,而是嵌入到容器UIView中。
主UIScrollView委托的viewForZoomingInScrollView:
方法现在返回可见图片的容器UIView,因此该容器UIView将用于缩放。
使用setTransform:
和CGAffineTransformScale
同时使用动画CGAffineTransformMakeRotation
完成图像视图的旋转。
我的猜测是没有容器UIView的实现不起作用,因为UIImageView不能再由主UIScrollView转换,当已经应用了转换时。