【问题标题】:iPhone - Trouble zooming/image placement in UIScrollView on iPadiPhone - iPad 上 UIScrollView 中的缩放/图像放置问题
【发布时间】:2014-07-09 06:31:06
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: ios ipad uiscrollview zooming


    【解决方案1】:

    所以这对我来说是一种独特的情况,但在 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)];
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2011-07-03
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多