首页 文章

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

提问于
浏览
1

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

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

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

1 回答

  • 7

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

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

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

    Requirements

    • 水平滚动全屏图片列表

    • 旋转设备不得旋转应用程序,但必须旋转显示的图片

    • 必须能够在纵向和横向握住设备时缩放图片

    How I implemented it

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

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

    ┌────────────────────┐
    │┌───┐┌───┐┌───┐┌───┐│
    ││ 1 ││ 2 ││ 3 ││ 4 ││
    ││   ││   ││   ││   ││
    │└───┘└───┘└───┘└───┘│
    └────────────────────┘
    

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

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

相关问题