2015-09-26 59 views
0

下面的代碼按照預期在第一次從相機膠捲中選取圖像時運行。縮小圖像以適應scrollView。但是當我再次運行它來重新拍攝圖像並再次選擇相同的圖像時,它會放大到1.0的比例。無法弄清楚我需要重新設置以使其每次都能保持一致。有任何想法嗎?UIScrollView zoomScale不一致

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 

    scrollView.contentSize = CGSize(width: 0, height: 0) 
    picView.image = nil 
    picView.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 
    picView.removeFromSuperview() 
    self.dismissViewControllerAnimated(true, completion: nil) 
    scrollView.addSubview(picView) 

    scrollView.contentSize = image.size 

    let scaleWidth = scrollView.frame.size.width/scrollView.contentSize.width //image.size.width 
    let scaleHeight = scrollView.frame.size.height/scrollView.contentSize.height //image.size.height 
    let minScale = min(scaleWidth, scaleHeight) 
    scrollView.minimumZoomScale = minScale 
    scrollView.maximumZoomScale = 1.0 
    scrollView.zoomScale = minScale 
} 
+0

調試告訴你什麼? minScale的值是否正確出來? – matt

+0

是的,最小比例值總是相同&正確的,但我懷疑scrollView contentSize會以某種方式被搞亂。即使縮放比例正確,這會影響縮放嗎? – Kashif

+0

對,因爲這就是縮放的工作原理。 – matt

回答

2

我想你已經知道了這一點,但我只是填寫什麼可能是缺少的難題。縮放如何實際工作?正如我所說in my book

滾動視圖縮放通過應用縮放變換可伸縮視圖...此外,滾動視圖關注,使滾動繼續正常工作; ...因此,滾動視圖會自動縮放其自己的contentSize以匹配當前的zoomScale。

因此,您需要在開始播放內容大小之前刪除該變換。因此,在您交換圖像視圖之前,將zoomScale重置爲1就足夠了。

更好,爲什麼不把圖像視圖留在那裏呢?你在日常工作中似乎做了很多不必要的工作,爲什麼不把它看作是帶有圖像視圖內容視圖的滾動視圖,哪裏被換出的只是圖像?

最後,爲什麼不使用自動佈局?這樣,圖像的大小自動成爲圖像視圖的大小,圖像視圖的大小自動成爲滾動視圖的內容大小。

+0

太棒了!在開始時添加'scrollView.zoomScale = 1.0'解決了這個問題。 – Kashif

+0

謝謝@matt我正在做一些不必要的步驟,在開始時刪除和添加imageView,希望能夠解決這個問題。 – Kashif

+0

@Kashif我已經猜到了。 :) – matt