2015-09-15 28 views
2

我有一個UIScrollView,其中包含一個UIImageView。我正在設置最小的卷軸工廠,以便在視圖完全縮小時,可以看到整個圖片並在整個屏幕上延伸。如何正確計算UIScrollView的最小縮放係數?

目前我的代碼似乎設置的最小值太低。可以看到整個圖片,但圖片右側有很多額外的空間。當視圖顯示圖像可以完全移出視野時,會有非常多的額外空間。一旦執行另一個縮放,很多額外的空間就會消失,但圖像仍然可以縮小得太小。

下面是代碼:

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) 
+0

你的代碼看起來很穩固。無論如何,scrollView.frame和scrollView.contentSize的值是什麼? –

+0

'scrollView.frame =(0.0,0.0,600.0,600.0)'和'scrollView.contentSize =(600.0,400.4)' – Max

+0

除了基於contentSize計算外,請嘗試使用imageView.frame.size。另外,如果你將變焦硬編碼爲.67,你還能看到白屏嗎? –

回答

1

這個問題了自動佈局的限制沒有被viewWillAppear計算什麼。爲了解決這個問題,我將邏輯移至viewDidLayoutSubviews