我有一个可分页的UIScrollView,其中包含不同类型的信息,例如UITable和可缩放的图像。因此,我设置了一个可分页的主ScrollView,作为子视图添加了可缩放的图像ScrollView,并将图像作为内容。 一切都很好,只是我无法设置imageScrollViews的较小当前缩放比例。
UIImageView *imageView = [[UIImageView alloc] initWithImage:Image];
//storing a link to the imageView
[imagelinkArray addObject:imageView];
CGRect ScrollViewImageRect;
ScrollViewImageRect = CGRectMake((self.scrollView.frame.size.width) * i, 0, 320, self.scrollView.frame.size.height);
float widthfactor = ScrollViewImageRect.size.width / imageView.frame.size.width;
float heightfactor = ScrollViewImageRect.size.height / imageView.frame.size.height;
float zoomscale = MIN(widthfactor, heightfactor);
UIScrollView *imageScrollView = [[UIScrollView alloc] initWithFrame:ScrollViewImageRect];
imageScrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
imageScrollView.delegate = self;
[imageScrollView setMinimumZoomScale:zoomscale];
[imageScrollView setMaximumZoomScale:1.5];
[imageScrollView addSubview:imageView];
//doesn't work:
[imageScrollView setZoomScale:0.5 animated:YES];
[self.scrollView addSubview:imageScrollView];
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return [imagelinkArray objectAtIndex:page];
}
主ScrollView和图片滚动视图都能够完美绘制,并且可以正确地进行缩放和分页。最小缩放因子的计算也是正确的。当我缩小时,我可以一直缩小到达到图像限制。但是,第一次切换到图片滚动视图时,它的当前缩放比例总是1.0,而应该是最小比例。
在上面的代码中无论我设置缩放比例在哪里,它都不起作用:
[changeScrollView setZoomScale:changeScrollView.minimumZoomScale animated:YES];
如果我记录当前的缩放比例,我总是得到1.0;
唯一有效的方法是在 - (void)scrollViewDidScroll:
方法中更改缩放比例,当然这并没有太大帮助,因为缩放也会调用它,这会立即重置缩放。但至少我可以找出代码某种程度上起作用的原因。我有感觉一个UIScrollView不会缩放当它现在不可见在屏幕上。如何解决这个问题?
更新: 好的。同时我发现问题很可能来自我的“子视图”ScrollView的基础布局。当我缩放其中一张图片并记录ScrollView的当前缩放因子时,它们全部相同(包括主ScrollView和所有子ScrollView)。 这可能的原因是什么,或者怎样通过不同的布局来解决它?
[imageScrollView setMinimumZoomScale:zoomscale];
当我查看其中一张图片并使用捏合手势进行缩小时,我可以一直缩小直到达到图像边界,因此缩放因子是正确的。 - user2014551zoomscale
值不低于0.5(或相等),当您尝试将其编程设置为0.5时,它将不会缩小。 - Rukshan