UIScrollView ContentSize не ведет себя как ожидалось - PullRequest
4 голосов
/ 21 февраля 2012

Меня немного смущает свойство contentSize в UIScrollView. У меня есть изображение в моем scrollView, которое я масштабирую и панорамирую. Я поигрался с разными значениями contentSize, но мне кажется, что не имеет значения, какие значения я ввожу, contentSize всегда настроен на размер изображения. Я заметил, что это происходит только тогда, когда я произвел увеличение. Перед масштабированием contentSize сохраняет заданные мной значения, но после увеличения contentSize устанавливает размер изображения.

Я что-то неправильно понимаю?

1 Ответ

4 голосов
/ 22 февраля 2012

Это интересно.Согласно распечатке следующие - (void)scrollViewDidZoom:(UIScrollView *)scrollView contentSize на самом деле scrollview.frame.size x scrollview.zoomScale.

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    if ([self.scrollView zoomScale] < 1.0)[self.scrollView setZoomScale:1.0];

    NSLog (@"didZoom: ZoomScale: %.2f; ContentSize: %@; ScrollView: %@", self.scrollView.zoomScale, NSStringFromCGSize(self.scrollView.contentSize),NSStringFromCGSize(self.scrollView.frame.size));
}

Две строки распечатки:

didZoom: ZoomScale: 1.76;ContentSize: {1798.02, 1208.05};ScrollView: {1024, 688}

didZoom: ZoomScale: 1,50;ContentSize: {1537.94, 1033.3};ScrollView: {1024, 688}

Не нашел эту «функцию» в документации.

Редактировать : пробовал также следующее:

-(void) manualSettingOfContentSizeAndZoomScale

{
    NSLog (@"A: ZoomScale: %.2f; ContentSize: %@; ScrollView: %@", self.scrollView.zoomScale, NSStringFromCGSize(self.scrollView.contentSize),NSStringFromCGSize(self.scrollView.frame.size));

    self.scrollView.contentSize = CGSizeMake(1800.0,1200.0);

    NSLog (@"B: ZoomScale: %.2f; ContentSize: %@; ScrollView: %@", self.scrollView.zoomScale, NSStringFromCGSize(self.scrollView.contentSize),NSStringFromCGSize(self.scrollView.frame.size));

    self.scrollView.zoomScale = 1.8;

    NSLog (@"C: ZoomScale: %.2f; ContentSize: %@; ScrollView: %@", self.scrollView.zoomScale, NSStringFromCGSize(self.scrollView.contentSize),NSStringFromCGSize(self.scrollView.frame.size));

    self.scrollView.contentSize = self.scrollView.frame.size;

    NSLog (@"D: ZoomScale: %.2f; ContentSize: %@; ScrollView: %@", self.scrollView.zoomScale, NSStringFromCGSize(self.scrollView.contentSize),NSStringFromCGSize(self.scrollView.frame.size));
}

Результат был:

A: Масштаб: 1,00;ContentSize: {0, 0};ScrollView: {1024, 688}

B: ZoomScale: 1,00;ContentSize: {1800, 1200};ScrollView: {1024, 688}

C: ZoomScale: 1,80;ContentSize: {1843.2, 1238.4};ScrollView: {1024, 688}

D: ZoomScale: 1,80;ContentSize: {1024, 688};ScrollView: {1024, 688}

A: ОК, задокументировано, что contentSize по умолчанию равно CGSizeZero (хотя scrollView обычно показывает его содержимое при zoomScale 1.0

B: после установки contentSize zoomScale не изменился, как и внешний вид scrollView

C: после установки zoomScale contentSize и внешний вид изменился соответственно

D: после сброса contentSizeничего не изменилось - contentSize как свойство действительно изменилось, но не повлияло на внешний вид

Вывод: используйте zoomScale для установки внешнего вида содержимого scrollView

Если память служитЯ прав: contentSize на самом деле важен для прокрутки UIScrollView с pagingEnabled, установленным на YES. Это довольно сложный объект, поэтому, возможно, не все связано так, как вы думаете или хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...