the*_*ory 5 cocoa-touch zoom objective-c uiscrollview bounce
我正在使用缩放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;
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效,除了此时它已经弹跳,所以设置minimumZoomScale什么都不做.因此,弹跳和收缩同时发生,你可能想象的看起来很奇怪.
所以我的问题是:如何防止仅在这种特定情况下发生反弹?没有UIScrollViewDelegate方法允许我的代码在手势完成和UIScrollView决定退回之间执行某些操作.我尝试了一些没有运气的其他技术,包括:
nil从–viewForZoomingInScrollView:当我90%的缩放门槛已经过去了.不起作用,因为在手势开始时调用此方法,而不是缩放的每个点.bouncesZoom在-scrollViewDidZoom:为假时,变焦倍数小于90%为真时,它的大于或等于90%.当刻度低于90%时,图像会严重抖动,因为当它bouncesZoom为假时不允许该尺寸.-touchesEnded:withEvent方法.永远不会被召唤.所以我有点失落.其他人试图做这样的事情?
我想写下这个问题帮助我走上了寻找解决方案的道路。幸运的是,这很容易!因此,第一步,在我设置的代码中minimumZoomScale,我还将 ivar 设置cachedMinZoomScale为相同的值。这样,当比例小于最小值的 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];
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,当滚动视图缩放时,-self.minimumZoomScale如果当前缩放比例小于实际最小值的 90%,则保持当前缩放比例,但在任何其他缩放比例时将其设置为实际最小值。然后,当缩放完成时,如果我们低于 90% 的阈值,它不会恢复到任何内容,因为它已经是最小尺寸,然后只需调用新的动画来缩小以关闭。
简单的。唷!
| 归档时间: |
|
| 查看次数: |
5211 次 |
| 最近记录: |