Вычисление минимального масштаба масштаба UIScrollView - PullRequest
6 голосов
/ 06 октября 2010

У меня есть изображение, которое я хочу загрузить в представление изображения и установить для параметраimumZoomScale, а также для zoomScale масштаб, подобный аспекту, который рассчитывается следующим образом:

// 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;

Размер iScrollView:450 x 320 пикселей, а размер iImageSize - 1600 x 1960 пикселей.

Выполнение минимальной математики ZoomScale от руки: 450/1960 = 0,22959184.Вместо этого система определяет 0,234693885 (???).

Но для того, чтобы окно вписалось в пространство 450px, обе цифры не работают (!!!).Я попытался вручную и обнаружил, что 0.207 - это правильное число (которое переводит на высоту изображения 2174 xp или, альтернативно, на высоту UIScrollView 406 пикселей).

Для информации: экран UIScrollview имеет размер 450 пикселей, а именно 480 пикселей без строки состояниявысота (10), минус UITabBar высота (20)

Есть какие-нибудь подсказки по этому неправильному поведению?

Ответы [ 2 ]

0 голосов
/ 09 июня 2015

Не уверен, если у вас все еще есть эта проблема, но для меня, масштаб абсолютно противоположен. minimumZoomScale = 1 для меня, и я должен рассчитать maximumZoomScale.

Вот код:

[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;
0 голосов
/ 06 октября 2010

Для простого увеличения / уменьшения я обычно использую приведенный ниже код. imumZoomScale = 1 устанавливает начальный масштаб для текущего размера изображения. Я задал MaximumZoomScale = 10, который можно рассчитать на основе фактического соотношения размера изображения и размера кадра контейнера.

[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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...