包含旋转的UIImageView的UIScrollView不会缩放

Ren*_*ené 1 cocoa-touch uiscrollview uiimageview ios

我正在使用带有多个UIScrollViews的UIScrollView作为子视图,每个都包含一个UIImageView来显示图片.
应用程序本身仅支持纵向方向,但我确实希望在旋转设备时旋转图像视图(观察UIDeviceOrientationDidChangeNotification).使用和两者
动画完成图像视图的旋转. 通过从包含图像视图的滚动视图返回图像视图来完成图像视图的缩放. setTransform:CGAffineTransformScaleCGAffineTransformMakeRotation
viewForZoomingInScrollView:

这一切都很有效,除了一件事:当图像视图旋转时,我无法再缩放.viewForZoomingInScrollView:正在调用调试节目,但scrollViewDidZoom:不是.

有没有人知道可能导致这个问题的原因是什么?

Ren*_*ené 7

通过将转换应用于UIScrollView(包含UIImageView)而不是UIImageView本身来修复它.

仅将转换应用于UIScrollView并不能很好地工作.它会将旋转的图像放在较小的视图中,并且缩放不会使用可用的屏幕空间.

我终于设法解决了这个问题,所以这就是方法.

要求

  • 水平滚动的全屏图片列表
  • 旋转设备不得旋转应用程序,但必须旋转显示的图片
  • 在以纵向和横向方向握住设备时,必须能够缩放图片

我是如何实现它的

一个主要的UIScrollView,高度等于屏幕高度,宽度等于屏幕宽度*图片数.分页已启用.
这个主UIScrollView包含每张图片的子视图.每个子视图如下所示:
UIScrollView> UIView> UIImageView

UIScrollView具有屏幕大小,其origin.x属性对于第一个子视图为0,并随着每个后续UIScrollView的屏幕宽度而增加.结果是一个主UIScrollView,所有子UIScrollViews就像这样(没有间距):

??????????????????????
??????????????????????
?? 1 ?? 2 ?? 3 ?? 4 ??
??   ??   ??   ??   ??
??????????????????????
??????????????????????
Run Code Online (Sandbox Code Playgroud)

为了解决旋转问题,UIImageView不再是UIScrollView的直接子视图,而是嵌入在容器UIView中.主UIScrollView委托
viewForZoomingInScrollView:方法现在返回可见图片的容器UIView,因此这个容器UIView将用于缩放.图像视图的旋转仍然setTransform:使用CGAffineTransformScale和两者进行动画处理CGAffineTransformMakeRotation.

我猜测没有容器UIView的实现不起作用,是因为UIImageView不能再被主UIScrollView转换,当时已经应用了转换.