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

标签 ios cocoa-touch uiscrollview uiimageview

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

这一切都很好,除了一件事:当 ImageView 旋转时,我不再能够缩放。调试显示viewForZoomingInScrollView:正在调用,但 scrollViewDidZoom:不是。

有谁知道可能导致此问题的原因是什么?

最佳答案

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

仅将转换应用到 UIScrollView 并不能很好地工作。它会将旋转后的图像放在一个较小的 View 中,并且缩放不会使用可用的屏幕空间。

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

要求

  • 全屏图片水平滚动列表
  • 旋转设备不能旋转app,必须旋转如图
  • 必须能够在纵向和横向握持设备时缩放图片

  • 我是如何实现的

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

    UIScrollView 有屏幕的大小,它的 origin.x 属性对于第一个 subview 为 0,并随着每个后续 UIScrollView 的屏幕宽度而增加。结果是一个主 UIScrollView,所有子 UIScrollView 像这样彼此相邻(没有间距):
    ┌────────────────────┐
    │┌───┐┌───┐┌───┐┌───┐│
    ││ 1 ││ 2 ││ 3 ││ 4 ││
    ││   ││   ││   ││   ││
    │└───┘└───┘└───┘└───┘│
    └────────────────────┘
    

    为了解决旋转问题,UIImageView 不再是 UIScrollView 的直接 subview ,而是现在嵌入到容器 UIView 中。viewForZoomingInScrollView:主 UIScrollView 委托(delegate)的方法现在返回可见图片的容器 UIView,因此该容器 UIView 将用于缩放。
    ImageView 的旋转仍然通过动画 setTransform: 完成。使用CGAffineTransformScaleCGAffineTransformMakeRotation .

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

    关于ios - 包含旋转的 UIImageView 的 UIScrollView 不会缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258975/

    相关文章:

    ios - 无法在 swift 4 中使用 Alamofire 从 JSON 响应中提取 token

    iphone - 关闭当前模态视图 Controller 的最优雅方式?

    ios - 错误编程的后果 : dismissViewController vs popViewController

    javascript - PanResponder 中的 ScrollView

    iphone - 当没有互联网连接时无法计算 ScrollView 的高度

    ios - 用户壁纸作为背景

    ios - 类中的 extern NSString *const。

    iphone - Objective-C 中的动态对象属性名称

    objective-c - 为什么Camera API仅使用英语? (“取消”,“自动”,“重新拍摄”,“使用”按钮;以及“移动和缩放”标签。)

    ios - 缩放和 ScrollView