如何正确计算UIScrollView的最小缩放系数?

时间:2015-09-15 16:16:18

标签: ios swift

我的UIImageView包含一个override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) imageView.image = image! imageView.frame.size = image!.size scrollView.contentSize = imageView.frame.size let scrollViewFrame = scrollView.frame let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height let minScale = min(scaleWidth, scaleHeight) scrollView.minimumZoomScale = minScale scrollView.maximumZoomScale = 3.0 scrollView.zoomToRect(imageView.frame, animated: false) } 。我正在尝试设置最小滚动工厂,以便在视图完全缩小时,可以看到整个画面并在整个屏幕上延伸。

目前我的代码似乎设置的最低值太低了。可以看到整个画面,但画面右侧有很多额外的空间。当视图出现图像可以完全移出视图时,会有太多额外空间。一旦执行了另一次缩放,许多额外空间就会消失,但图像仍然可以缩小得太小。

以下是代码:

Scroll view frame: (0.0, 0.0, 600.0, 600.0)
Scroll view content size: (1500.0, 1001.0)
Image view frame: (0.0, 0.0, 1500.0, 1001.0)

编辑:缩放前后的尺寸似乎发生了变化。

缩放前:

Scroll view frame: (0.0, 0.0, 600.0, 600.0)
Scroll view content size: (600.0, 400.4)
Image view frame: (0.0, 0.0, 600.0, 400.4)

缩放后:

{{1}}

2 个答案:

答案 0 :(得分:1)

此问题是在viewWillAppear中未计算自动布局约束的内容。为了解决这个问题,我将逻辑移到viewDidLayoutSubviews

答案 1 :(得分:0)

要计算最小缩放系数,以确保边缘周围没有多余空间,应使用max而不是min

let scaleWidth = scrollView.frame.width / scrollView.contentSize.width
let scaleHeight = scrollView.frame.height / scrollView.contentSize.height
let minScale = max(scaleWidth, scaleHeight)
scrollView.minimumZoomScale = minScale