2012-05-14 27 views
3

我遇到了一個問題,即在響應最小縮放比例更改時正確更新UIScrollView。更改子視圖後,UIScrollView不尊重minimumZoomScale

滾動視圖具有一個UIImageView作爲一個子視圖,和的UIImageView的圖像特性是響應於UIPickerView的didFinishPickingMediaWithInfo方法設置:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

    UIImage *takenImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    [self.imageView setImage:takenImage]; 
    [self.imageView setFrame:CGRectMake(self.imageView.frame.origin.x, self.imageView.frame.origin.y, takenImage.size.width, takenImage.size.height)]; 

    [self.scrollView setContentSize:CGSizeMake(takenImage.size.width, takenImage.size.height)]; 

    [self.scrollView setMinimumZoomScale:[self.scrollView frame].size.width/takenImage.size.width]; 
    [self.scrollView setMaximumZoomScale:2.0]; 
    [self.scrollView setZoomScale:[self.scrollView minimumZoomScale] animated:YES]; 

    [self dismissModalViewControllerAnimated:YES];   

} 

此正常工作的第一次的圖像使用該添加方法。但是,如果再次觸發此方法 - 即使是第一次添加相同的圖像 - 後續圖像將在scrollView中以全尺寸顯示,並且不能縮小 - 只能放大。

I'已將scrollView的contentSize,zoomScale,minimumZoomScalemaximumZoomScale轉儲到日誌中,並且它們每次都是相同的。每次正確計算minimumZoomScale

就好像scrollView正在重畫一個minimumZoomScale爲1.0,而忽略了它被明確設置的事實。有什麼顯而易見的,我在這裏失蹤?

+0

更新:通過的摧毀了滾動,如果圖像拍攝被取消我解決問題的工作 - 從superView中刪除它,然後設置爲零。 didFinishPickingMediaWithInfo方法然後重新創建它。它的工作原理,但它似乎是一個解決問題的笨手笨腳的方式... – TimD

回答

13

問題似乎是 - 不確定此行爲是否記錄在某處 - 在當前縮放比例設置爲1.0以外的值時重置內容大小。

修復的方法是簡單的:前復位zoomScale屬性爲1.0 設置新的內容大小:

// See http://stackoverflow.com/questions/10586577 
// first reset before new content size 
scroller.zoomScale = 1.0f; 
// set new content size 
scroller.contentSize = newImage.size; 
// ... adjust minimum/maximum zoom scales if needed 
+1

謝謝你救了我從拉*所有*我的頭髮:)非常讚賞和非常尊重! – shabbirh