2009-03-04 79 views
1

我有一个UIScrollView包含一个图像和一个分段控件,允许用户切换ScrollView内部的图像。如果我只是在UIImageView内部交换图像,它将以放大状态显示新图像。如何将UIScrollView重置回其未放大状态?如何重置(即取消缩放)UIScrollView?

回答

2

我有详细的讨论如何(以及为什么)UIScrollView缩放工作在github.com/andreyvit/ScrollingMadness/

(该链接还包含了如何编程方式放大UIScrollView的描述,如何效仿图片库式传呼+变焦+滚动,实例项目和ZoomScrollView类,封装了一些变焦魔法。)

Quote:

UIScrollView没有“当前缩放级别”的概念,因为它包含的每个子视图可能有其自己的当前缩放级别。请注意,UIScrollView中没有字段保持当前缩放级别。但是我们知道有人存储缩放级别,因为如果捏住缩放子视图,然后将其转换重置为CGAffineTransformIdentity,然后再次捏住,则您会注意到子视图的前一缩放级别已恢复。事实上,如果你看看反汇编,它是UIView存储它自己的缩放级别(在_gestureInfo字段指向的UIGestureInfo对象内部)。它还有一套很好的无证方法,如zoomScalesetZoomScale:animated:。 (请注意,它也有一些旋转相关的方法,也许我们很快就会得到旋转手势支持。)

但是,如果我们创建一个新的UIView,只是为了缩放并添加我们真正的可缩放视图为它的孩子,我们将始终从缩放级别1.0开始。我的程序缩放实现是基于这个技巧。

0

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

但是,请注意,您的下一个缩放操作将在先前的缩放缩放停止的位置开始(即您的新缩放将被忽略)。要解决此问题,您可能需要执行一些我描述的内容here

+0

所以当我切换图像时,我在做以下操作: \t imageView.transform = CGAffineTransformIdentity; 这是你的意思吗?因为它似乎没有影响它。 – Bdebeez 2009-03-04 21:28:13

+0

你如何切换图像?您的内容是否为您的UIScrollView查看UIImageView?这个UIImageView是什么,然后你从viewForZoomingInScrollView返回:?这应该适用于滚动视图的主要子视图。 – 2009-03-05 00:49:27