7

I have an image that I want to load into an image view and set the minimumZoomScale, as well as the zoomScale to an aspectFill like scale that I calculate as follows:

// configure the map image scroll view
iImageSize = CGSizeMake(iImageView.bounds.size.width, iImageView.bounds.size.height);
iScrollView.minimumZoomScale = iScrollView.bounds.size.height / iImageSize.height;
iScrollView.maximumZoomScale = 2;
iScrollView.zoomScale = iScrollView.minimumZoomScale;
iScrollView.contentOffset = CGPointMake(0, 0);
iScrollView.clipsToBounds = YES;

The iScrollView size is 450 x 320px and the iImageSize is 1600 x 1960px.

Doing the minimumZoomScale math by hand: 450 / 1960 = 0.22959184. The system determines 0.234693885 instead (???).

But to get the window fit into the 450px space, both figures don't work (!!!). I manually tried and found 0.207 is the right number (that would translate to a image height of 2174 xp or alternatively a UIScrollView height of 406px).

For information: the UIScrollview screen is 450px, namely 480px minus status bar height (10), minus UITabBar height (20)

Any clues on this misbehaviour?

  • I've encountered that as well. I set the minimumZoomScale to some value then it autoadjusts at some point. The adjustment is more or less unnoticeable though, I just left it in, and just added this line afterwards scrollview.zoomScale = scrollview.minimumZoomScale; just to make sure everything is synced. – Altealice Oct 06 '10 at 11:16

2 Answers2

0

Not sure if you still have this problem, but for me, the scale is exactly the opposite. minimumZoomScale = 1 for me and I have to calculate the maximumZoomScale.

Here's the code:

[self.imageView setImage:image];
// Makes the content size the same size as the imageView size.
// Since the image size and the scroll view size should be the same, the scroll view shouldn't scroll, only bounce.
self.scrollView.contentSize = self.imageView.frame.size;

// despite what tutorials say, the scale actually goes from one (image sized to fit screen) to max (image at actual resolution)
CGRect scrollViewFrame = self.scrollView.frame;
CGFloat minScale = 1;
// max is calculated by finding the max ratio factor of the image size to the scroll view size (which will change based on the device)
CGFloat scaleWidth = image.size.width / scrollViewFrame.size.width;
CGFloat scaleHeight = image.size.height / scrollViewFrame.size.height;
self.scrollView.maximumZoomScale = MAX(scaleWidth, scaleHeight);
self.scrollView.minimumZoomScale = minScale;
// ensure we are zoomed out fully
self.scrollView.zoomScale = minScale;
mikeho
  • 6,790
  • 3
  • 34
  • 46
-1

For simple zoom in/out i generally use below code. minimumZoomScale= 1 sets initial zoom to current image size. I have given maximumZoomScale = 10 which can be calculated from actual ratio of image size and container frame size.

[scrollView addSubview: iImageView];
    scrollView.contentSize = iImageView.frame.size;
    scrollView.minimumZoomScale = 1.0;
    scrollView.maximumZoomScale = 10;
    [iImageView setFrame:CGRectMake(0, 0, 450, 320)];
[scrollView scrollRectToVisible:iImageView.frame animated:YES];
Avinash
  • 433
  • 6
  • 16