gpt4 book ai didi

objective-c - 如何取消 UIScrollView 缩放反弹?

转载 作者:太空狗 更新时间:2023-10-30 03:49:43 24 4
gpt4 key购买 nike

我正在使用缩放 UIScrollView 在我的 iPad 应用程序中显示图像。缩放效果很好,捏一下可以使图像变小或变大。我还启用了 bouncesZoom,这样如果用户以某种方式或另一种方式将它拉伸(stretch)得太远,它就会弹回最小或最大缩放。

现在我想识别捏合结束时图像比最小缩放尺寸小 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 决定反弹之间做一些事情。我尝试了很多其他技术但没有成功,包括:

  • 当超过我的 90% 缩放阈值时,从 –viewForZoomingInScrollView: 返回 nil。不起作用,因为在手势开始时调用此方法,而不是针对缩放的每个点。
  • -scrollViewDidZoom: 中的 bouncesZoom 设置为 false 当缩放系数小于 90% 时设置为 true 当它大于或等于 90% 时。当比例低于 90% 时,图像会严重抖动,因为当 bouncesZoom 为 false 时它不允许该尺寸。
  • 添加 -touchesEnded:withEvent 方法。它永远不会被调用。
  • 添加我自己的 UIPinchGestureRecognizer 以与 UIScrollView 自己的捏合识别器同时执行。不起作用,因为它的处理程序(和委托(delegate)方法)在 UIScrollView 的捏合手势之后被调用,这使得决定在我的手势告诉它不要之前反弹。我尝试删除所有核心手势,添加我的,然后再添加核心手势。但在 UIScrollView 确定它正在弹跳后,我的手势仍然被调用。

所以我有点不知所措。还有其他人试过这样做吗?

最佳答案

您只需将此属性设置为 NO。(例如在 ViewDidLoad 中)

scrollView.bouncesZoom = NO;

关于objective-c - 如何取消 UIScrollView 缩放反弹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com