UIScrollView ContentSize不符合预期

时间:2012-02-21 19:05:56

标签: iphone objective-c ios cocoa-touch uiscrollview

我对contentSize中的UIScrollView属性感到有点困惑。我在我的scrollView中有一个图像,我正在缩放和平移。我一直在玩contentSize的不同值,但在我看来,输入的值并不重要,contentSize始终设置为图像的大小。我注意到这只发生在我进行缩放时。在缩放之前,contentSize会保留我设置的值,但在缩放后,contentSize会将自身设置为图像的大小。

我误解了什么吗?

1 个答案:

答案 0 :(得分: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));
}

打印输出的两行:

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: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}; ScrollView:{1024,688}

答:好的,记录的默认contentSize为CGSizeZero(尽管scrollView通常会显示其内容 在zoomScale 1.0

B:设置contentSize zoomScale后没有改变,scrollView

的外观也没有改变

C:设置zoomScale contentSize后,外观也相应更改

D:重置contentSize后没有任何变化 - contentSize,因为某个属性确实发生了变化,但并未影响外观

结论:使用zoomScale设置scrollView内容的外观

如果内存为我提供了正确的内容,那么在UIScrollView设置为pagingEnabled的情况下滚动YES非常重要。这是一个非常复杂的对象,所以也许所有东西都没有像人们想象或想要的那样连接起来。