如果您的 UIScrollView 已经处于该缩放级别,则 zoomToRect 啥也不做

Posted

技术标签:

【中文标题】如果您的 UIScrollView 已经处于该缩放级别,则 zoomToRect 啥也不做【英文标题】:zoomToRect does nothing if your UIScrollView is already at that zoomlevel如果您的 UIScrollView 已经处于该缩放级别,则 zoomToRect 什么也不做 【发布时间】:2010-01-22 09:47:43 【问题描述】:

我想我在 UIScrollView 中发现了一个错误,但我想检查其他人是否正在观察同样的事情以及这是否是预期的行为。

我有一个 UIScrollView,我正在尝试使用 zoomToRect 设置它正在查看的内容。这很好用。如果我然后拖动视图使其在别处查找,然后使用相同的值触发 zoomToRect,它什么也不做。 zoomToRect 命令仅在需要调整 zoomScale 时才起作用,如果只需要平移,则视图将静止不动。由于用户可以通过捏合来放大或缩小,我只是希望使用 zoomToRect 而不必仔细检查 zoomLevels 是否会有所不同。

有其他人经历过吗?它应该以这种方式发生还是一个错误?

***按要求添加代码

第一次调用 zoomToRect

[myScrollView zoomToRect:zoomToRect animated:YES];

视图正确地瞄准了我想要的 UIScrollView 中的点

现在让用户在屏幕上拖动并移动 UIScrollView 正在查看的点。不进行缩放,只进行平移。

现在再次调用 zoomToRect,使用相同的矩形

[myScrollView zoomToRect:zoomToRect animated:YES];

什么都没有发生。

【问题讨论】:

或许可以贴出相关代码sn-ps。 【参考方案1】:

Apple 表示这是 UIScrollView 的一个已知错误,将在未来的版本中修复。

https://devforums.apple.com/message/158712#158712

与此同时,我已按如下方式解决此问题

float zoomBefore = myScrollView.zoomScale;
[myScrollView zoomToRect:zoomToRect animated:YES];
float zoomAfter = myScrollView.zoomScale;
if (zoomBefore == zoomAfter)

    [myScrollView setContentOffset:imageCoords animated:YES];

【讨论】:

【参考方案2】:

默认 maximumZoomScale 是 1.0。所以当我们双击时它不会缩放。 像这样设置maximumZoomScale

myScrollView.maximumZoomScale = 5.0f;

【讨论】:

虽然这可能是真的,但它与这个问题无关。

以上是关于如果您的 UIScrollView 已经处于该缩放级别,则 zoomToRect 啥也不做的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 直到缩放用户操作后才平移

缩小 UIScrollView

当我的 UIScrollView 缩放图像时,如何使框架正确居中?

使用 presentViewController 时有趣的 UIScrollView

缩放CALayer会使视图模糊

如何使用 UIScrollView 捕捉缩放?