我正在使用缩放 UIScrollView 在我的 iPad 应用程序中显示图像。缩放效果很好,捏合使图像适当变小或变大。我还bouncesZoom
启用了它,如果用户以一种或另一种方式将其拉伸得太远,它会反弹回最小或最大缩放。
现在,我想识别何时收缩结束,图像比最小缩放尺寸小 10%,在这种情况下,防止反弹发生并触发不同的动画来缩小图像以“关闭”它。这样,可以有一种“捏合”手势。我想出的最简单的方法是:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (self.zoomBouncing && zoomedToScale / self.minimumZoomScale < 0.90) {
// We've let go and were under 90% of the minimum size.
self.minimumZoomScale = zoomedToScale;
[self shrinkImageToNothing];
} else {
// How far have we gone?
zoomedToScale = self.zoomScale;
}
}
这很好用,只是此时它已经在弹跳,所以设置minimumZoomScale
没有任何作用。因此,反弹和收缩同时发生,正如您可能想象的那样,这看起来很奇怪。
所以我的问题是:如何防止反弹仅在这种特定情况下发生?没有 UIScrollViewDelegate 方法允许我的代码在手势完成和 UIScrollView 决定反弹之间执行某些操作。我尝试了很多其他技术,但都没有运气,包括:
nil
从–viewForZoomingInScrollView:
我的 90% 缩放阈值通过后返回。不起作用,因为在手势开始时调用此方法,而不是针对缩放的每个点。- 缩放系数小于 90% 时设置
bouncesZoom
为false,大于或等于 90% 时设置为 true。-scrollViewDidZoom:
当比例低于 90% 时使图像严重抖动,因为当bouncesZoom
为假时它不允许该尺寸。 - 添加
-touchesEnded:withEvent
方法。它永远不会被调用。 - 添加我自己的 UIPinchGestureRecognizer 以与 UIScrollView 自己的捏识别器同时执行。不起作用,因为它的处理程序(和委托方法)是在 UIScrollView 的捏合手势之后调用的,这使得决定在我的手势不能告诉它之前反弹。我尝试删除所有核心手势,添加我的,然后添加核心手势。但是在 UIScrollView 决定它正在弹跳之后,我的手势仍然被调用。
所以我有点茫然。还有其他人试图做这样的事情吗?