2012-02-21 62 views
4

Im UIScrollView中的contentSize屬性有點困惑。我在我的scrollView中有一個圖像,我正在縮放和平移。我一直在玩contentSize的不同值,但在我看來,輸入什麼值並不重要,contentSize總是設置爲圖像的大小。我注意到,這隻發生在我執行縮放時。在縮放之前,contentSize會保留我設置的值,但在縮放之後,contentSize會將其自身設置爲圖像的大小。UIScrollView ContentSize沒有按預期方式運行

我誤會了什麼嗎?

+0

你是如何將圖像以滾動視圖? – 2012-02-21 19:10:16

+0

@ StephenAshley.developer [self.scrollView addSubview:圖片] – 2012-02-21 19:11:56

+1

你在viewForZooming委託方法返回的UIImageView? – DJPlayer 2012-02-21 19:52:04

回答

4

這很有趣。根據下面的打印輸出- (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)); 
} 

兩行的prinout的:

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)); 
} 

結果是:

答:ZoomScale: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};滾動型:{1024,688}

答:OK,它的記錄是默認contentSize是CGSizeZero(雖然scrollView通常是顯示它的內容 在zoomScale 1.0

B:設置contentSizezoomScale後並沒有改變,無論是做的scrollView

C外觀:設置zoomScalecontentSize後和外觀相應地改變

d:復位後什麼都沒有改變 - contentSize作爲一個屬性沒有改變,但並沒有影響到appearence

結論:如果沒記錯的話contentSize其實是很重要的滾動UIScrollView使用zoomScale設置scrollView的內容

外觀與pagingEnabled設置爲YES。這是一個相當複雜的對象,所以也許一切都不像人們想象或想要的那樣連接。

+0

有趣的觀察。如果您將contentSize設置爲不同的值(例如,在viewDidLoad中),這種關係是否仍然成立?即內容大小是否不斷重置爲scrollView frame * zoom? – 2012-02-22 13:19:01

+0

不,請參閱編輯。如果你設置了zoomScale,它就成立了。我認爲(不要抱着我)contentSize的目的更多的是分頁和滾動比縮放 - 而縮放時,你可以用它作爲信息來計算的東西,但你(看起來像)無法通過簡單設置縮放內容大小。似乎因爲設置不當的contentSize會影響比例。 – 2012-02-22 13:43:10

+1

這是測試 - 非常有趣。你如何看待這與我的形象?爲了得到我所看到的行爲,這意味着scrollView的contentSize(或者它的框架,就像它現在出現的)正在改變,以匹配圖像大小 - 這看起來似乎沒錯。我會檢查我的autoScaling等,但我很確定它的全部爲我的scrollView。 – 2012-02-22 14:00:22