iPhone - 在iPad上的UIScrollView中无法缩放/放置图像

时间:2014-05-20 20:23:44

标签: ios ipad uiscrollview zoom

我的ScrollView出现问题。我以编程方式将子视图UIImageView添加到ScrollView,并实现缩放。我使用下面的代码在iPhone上没有任何问题使图像居中,但在iPad上,图像向右移动并向下移动。我添加了iPad的故事板和一个空视图控制器并将其连接起来,就像我为iPhone做的那样。我没有ScrollView子类(这么简单,我认为不需要)。

如何让图像/滚动视图在iPad上居中?

代码:我没有在代码中的任何其他位置指定位置或大小

这都在我的viewcontroller.m

//Create scrollView.
    _scrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]];
    [_scrollView setBackgroundColor:[UIColor whiteColor]];
    [_scrollView setDelegate:self];
    [_scrollView setBouncesZoom:YES];
    [[self view] addSubview:_scrollView];

//Add violinImage to scrollView
    _currentImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:_currentImageName]];
    [_scrollView setContentSize:[_currentImage frame].size];
    [_scrollView addSubview:_currentImage];

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return _myImage;
}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    UIView *subView = [scrollView.subviews objectAtIndex:0];
    CGFloat offsetX;
    CGFloat offsetY;
    if (IS_IPAD)
    {
        offsetX = (scrollView.bounds.size.width - scrollView.contentSize.width) /2;
        offsetY = scrollView.bounds.size.height * 0.3;
    }
    else
    {
        if (scrollView.bounds.size.width > scrollView.contentSize.width) {
            offsetX = (scrollView.bounds.size.width - scrollView.contentSize.width) * 0.5;
        }
        else
        {
            offsetX = 0.0;
        }

        if (scrollView.bounds.size.height > scrollView.contentSize.height)
        {
            offsetY = (scrollView.bounds.size.height - scrollView.contentSize.height) * 0.5;
        }
        else
        {
            offsetY = 0.0;
        }
    }
    subView.center = CGPointMake(scrollView.contentSize.width * 0.5 + offsetX, scrollView.contentSize.height * 0.5 + offsetY);
}

谢谢!

1 个答案:

答案 0 :(得分:0)

所以这对我来说是一个独特的案例,但在iPad上,我的图像并不比缩放后的滚动视图框架大。我在原始问题中没有显示的部分代码因为我认为它不相关。哎呦。

它适用于iPhone,因为我的图像总是大于框架,因此它不会应用任何偏移,并使滚动视图(和内容)居中。在iPad上我得到了iPhone数学的偏移值,所以我需要反转偏移计算。

这是我在设置缩放以使其工作时所做的。

if (IS_IPAD && IS_RETINA) {
        float topInset = (imageSize.height - maxSize.height) / 2.0;
        float sideInset = (imageSize.width - maxSize.width) / 2.0;
        if (topInset < 0.0) topInset = 0.0;
        if (sideInset < 0.0) sideInset = 0.0;
        [_scrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
    }
    else
    {
        float topInset = (maxSize.height - imageSize.height) / 2.0;
        float sideInset = (maxSize.width - imageSize.width) / 2.0;
        if (topInset < 0.0) topInset = 0.0;
        if (sideInset < 0.0) sideInset = 0.0;
        [_scrollView setContentInset:UIEdgeInsetsMake(topInset, sideInset, -topInset, -sideInset)];
    }