我有一个UIScrollView,它包含一个图像和一个分段控件,允许用户在ScrollView中切换图像。如果我只是将图像交换到UIImageView内部,它将以放大状态显示新图像。如何将UIScrollView重置为未放大状态?

有帮助吗?

解决方案

我在 github.com/andreyvit/ScrollingMadness上详细讨论了UIScrollView缩放的工作原理(以及原因) /

(该链接还包含有关如何以编程方式缩放UIScrollView,如何模拟照片库样式分页+缩放+滚动,示例项目和ZoomScrollView类的说明,该类封装了一些缩放魔法。)

引用:

UIScrollView没有“当前缩放级别”的概念,因为它包含的每个子视图可能有自己的当前缩放级别。请注意,UIScrollView中没有字段来保持当前缩放级别。但是我们知道有人存储缩放级别,因为如果你捏缩放子视图,然后将其变换重置为CGAffineTransformIdentity,然后再次捏,你会注意到子视图的先前缩放级别已经恢复。

实际上,如果你看一下反汇编,UIView就会存储它自己的缩放级别(在_gestureInfo字段指向的UIGestureInfo对象中)。它还有一组很好的未记录的方法,如 zoomScale setZoomScale:animated:。 (请注意,它也有一堆与旋转相关的方法,也许我们很快就会获得旋转手势支持。)

但是,如果我们创建一个仅用于缩放的新UIView并将我们的真实可缩放视图添加为其子视图,我们将始终以缩放级别1.0开始。我对程序化缩放的实现基于这个技巧。

其他提示

如果您没有在完成缩放缩放事件时重新绘制视图,则缩放因子将由您从viewForZoomingInScrollView:delegate方法返回的视图的transform属性设置。要重置此缩放,请将视图的transform属性的值设置为CGAffineTransformIdentity。

请注意,您的下一个缩放变焦操作将从前一个缩放变焦停止的位置开始(即,您的新缩放将被忽略)。要解决这个问题,您可能需要实现我所描述的一些内容此处

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top