带嵌入式UIImageView的UIScrollView:放大/缩小时,contentSize高度和宽度的比例会发生变化

时间:2012-01-09 01:06:27

标签: objective-c ios5 uiscrollview

我在ios5中使用UIScrollView和嵌入式UIImageView编写了一个简单的自定义View Controller,目的是显示照片并能够进行缩放和平移。 这些都嵌入在UINavigationController和TabBarViewController

以下是我的代码片段:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.scrollView.delegate = self; 
    self.imageView.image = self.image;
    [self.imageView sizeToFit]; 
    self.scrollView.zoomScale = 1;
    self.scrollView.contentSize = self.imageView.image.size;
    NSLog(@"Original contentSize=(%f,%f), ratio=%f", self.scrollView.contentSize.width, self.scrollView.contentSize.height, self.scrollView.contentSize.height/self.scrollView.contentSize.width);
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{
    return self.imageView;
}

- (void) scrollViewDidZoom:(UIScrollView *)scrollView 
{
    NSLog(@"Changed contentSize=(%f,%f), ratio=%f", self.scrollView.contentSize.width, self.scrollView.contentSize.height, self.scrollView.contentSize.height/self.scrollView.contentSize.width);
}

我还将属性检查器中的View->模式默认为UIScrollView和UIImageView的“左上角”。变焦最小值/最大值已设置为0.1 / 10。代表和网点都联系在一起。

现在,当我运行程序时,这是我在图像上捏缩放时得到的结果:

  

2012-01-08 19:58:33.529 TestApp [499:f803]原始contentSize =(1024.000000,1024.000000),比率= 1.000000
  2012-01-08 19:58:37.599 TestApp [499:f803]更改了contentSize =(1014.381775,922.255310),比率= 0.909180
  2012-01-08 19:58:37.600 TestApp [499:f803]更改了contentSize =(1014.381775,922.255310),比率= 0.909180
  2012-01-08 19:58:37.730 TestApp [499:f803]更改了contentSize =(1004.763977,913.510986),比率= 0.909180
  2012-01-08 19:58:41.432 TestApp [499:f803]更改了contentSize =(974.770325,886.241394),比率= 0.909180
  2012-01-08 19:58:41.433 TestApp [499:f803]更改了contentSize =(974.770325,886.241394),比率= 0.909180
  2012-01-08 19:58:41.448 TestApp [499:f803]更改了contentSize =(954.777161,868.064026),比率= 0.909180

正如您所看到的,当我缩放时,contentSize的高度和宽度的比例会发生变化。有谁知道为什么会这样?我在这里做错了吗?我是否必须在scrollViewDidZoom中手动设置contentSize?

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,我通过将scrollView的frame.size设置为(320,367)来修复此问题。故事板设置错误。