Использование UIScrollView zoomToRect работает при увеличении ширины изображения, но не его высоты - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь увеличить изображение UIImage, чтобы увидеть как можно больше фотографий, не показывая пустое пространство. Таким образом, в портретном изображении я хочу увеличить изображение так, чтобы короткая сторона изображения полностью помещалась на экране. Весь следующий код находится в viewDidLoad.

У меня есть UIImageView и UIScrollView, настроенные следующим образом:

self.scrollView.delegate = self;
self.scrollView.contentSize = self.imageView.image.size;
self.imageView.frame = CGRectMake(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);

На данный момент масштабирование и прокрутка в пределах UIScrollView работает отлично.

Затем я реализую if-else, чтобы, когда картинка была выше, чем широкая, я звонила:

[self.scrollview zoomToRect:CGRectMake(0, 0, IMAGE_WIDTH, 1)];

Это работает отлично. Ширина изображения заполняет ширину экрана, и я могу только прокручивать вверх и вниз.

Но когда я вызываю точно такую ​​же функцию для высоты:

[self.scrollview zoomToRect:CGRectMake(0, 0, 1, IMAGE_HEIGHT)];

Ничего! Нет масштабирования вообще, как если бы функция никогда не вызывалась. Но я установил точку останова и прошел по коду в отладчике, и все было вызвано идеально, даже сама функция CGRectMake. Что происходит?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

В соответствии с комментариями выше, убедитесь, что вы выбрали прямоугольник шириной и высотой для заданного соотношения сторон, к которому вы хотите увеличить.

[self.scrollview zoomToRect:CGRectMake(0, 0, IMAGE_WIDTH * WIDTH_OF_VIEW / HEIGHT_OF_VIEW, IMAGE_HEIGHT)];
0 голосов
/ 23 февраля 2012

Метод zoomToRect также имеет аргумент «анимированный», то есть:

[self.scrollview zoomToRect:CGRectMake(0, 0, 1, IMAGE_HEIGHT) animated:NO];

Так что это может быть причиной проблемы.Если нет, вы можете попробовать это:

CGFloat scale1 = IMAGE_WIDTH / self.scrollview.frame.size.width;
CGFloat scale2 = IMAGE_HEIGHT / self.scrollview.frame.size.height;
[self.scrollview setZoomScale:MAX(scale1, scale2) animated:NO];
[self.scrollView scrollRectToVisible:CGRectMake(0,0,0,0) animated:NO];
...