我正在使用缩放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:
。不起作用,因为在手势开始时调用此方法,而不是缩放的每个点。bouncesZoom
中的-scrollViewDidZoom:
设置为false,当大于或等于90%时将其设置为true。当比例低于90%时,图像会严重抖动,因为当bouncesZoom
为假时,图像不允许该图像大小。-touchesEnded:withEvent
方法。永远不会被召唤。所以我有点失落。其他人试图做这样的事情吗?
答案 0 :(得分:7)
您只需将此属性设置为NO即可。 (例如在ViewDidLoad中)
scrollView.bouncesZoom = NO;
答案 1 :(得分:4)
我想写出这个问题帮助我找到解决方案的道路。幸运的是,这很容易!所以,第一步,在我设置minimumZoomScale
的代码中,我还将cachedMinZoomScale
ivar设置为相同的值。有了这个,当规模小于最小值的90%时,不会发生反弹实际上非常简单:
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
if (self.zoomScale / cachedMinZoomScale < 0.90) {
self.minimumZoomScale = self.zoomScale;
} else {
self.minimumZoomScale = cachedMinZoomScale;
}
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
if (self.zoomScale / cachedMinZoomScale < 0.90) {
[self shrinkImageToNothing];
}
}
基本上,当滚动视图缩放时,如果-self.minimumZoomScale
小于实际最小值的90%,请保持当前缩放比例,但在任何其他缩放比例下将其设置为实际最小值。然后,当缩放结束时,如果我们低于90%的阈值,它将不会回溯到任何东西,因为它已经是最小尺寸,然后只需调用新动画缩小到关闭。
简单。呼!
答案 2 :(得分:-2)
试试这个, [imageScrollview setBounces:NO];