【问题标题】:UIScrollView and UIImageView - move horizontallyUIScrollView 和 UIImageView - 水平移动
【发布时间】:2014-06-24 07:02:40
【问题描述】:

我有 UIScrollView 和 UIImageView 就可以了。我在代码中设置图像,它可以有不同的宽度(高度总是相同的)。我想让它可滚动(例如,只看到它的一部分并将其向左/向右拖动以查看其余部分)。

我在图像更改后执行了这段代码:

float x = self.imageView.frame.origin.x;
float y = self.imageView.frame.origin.y;
float w = scaleImg.size.width;
float h = scaleImg.size.height;

self.imageView.frame = CGRectMake(x, y, w, h);
self.imageView.bounds = CGRectMake(0, 0, w, h);


w = self.frame.size.width;
h = self.scrollView.frame.size.height;

[self.scrollView setContentSize: CGSizeMake(w + 20, h)];

问题是,它没有正确滚动(我认为它根本没有滚动)。滚动后,我的图像会调整大小,而不是我在上面设置的框架。

我正在使用 iOS7、故事板、自动布局。

【问题讨论】:

  • 我认为您可以尝试在滚动时使用动画设置滚动视图内容偏移量。根据当前和下一个/上一个图像大小进行内容偏移。如果您在代码中调整图像大小,请禁用自动布局。
  • 如果我禁用自动布局,剩下的我的 GUI 将不正确。
  • 所以不要在代码中调整大小并尝试 UIImageView contentMode AspectFit 。

标签: ios objective-c uiscrollview uiimageview


【解决方案1】:

如果您希望图像适合滚动视图并且只能左右滚动,您应该创建高度与滚动视图相同且宽度根据图像缩放的图像视图。试试这样的:

    UIImage *image;
    UIScrollView *scrollView;
    UIImageView *imageView;

    imageView = [[UIImageView alloc] initWithFrame:CGRectMake(.0f,
                                                              .0f,
                                                              scrollView.frame.size.height*image.size.width/image.size.height,
                                                              scrollView.frame.size.height)];//fixed height
    imageView.image = image;
    imageView.contentMode = UIViewContentModeScaleToFill;
    [scrollView addSubview:imageView];
    scrollView.contentSize = imageView.frame.size;
    scrollView.contentOffset = CGPointMake((scrollView.contentSize.width-scrollView.frame.size.width)*.5f, .0f);//scroll to center

注意我只为宽度比滚动视图大的图像设计了这个。如果情况并非总是如此,您应该为其他图像创建特定逻辑(背景可见或在 Y 坐标中可滚动)。

【讨论】:

  • 编辑:我所做的唯一更改是将 contentMode 设置为 UIViewContentModeLeft。使用您的解决方案,它会缩小图像。
【解决方案2】:

我猜你应该删除以下几行:

w = self.frame.size.width;
h = self.scrollView.frame.size.height;

scrollView 的内容大小应该反映封闭内容的大小,即应该是scaleImg.size.width & scaleImg.size.height

【讨论】:

    【解决方案3】:

    您将 w 作为滚动视图和图像视图的宽度......内容大小应该大于滚动视图。尝试将图像视图宽度设置为大于滚动视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2016-09-07
      • 2013-08-22
      • 2012-09-23
      • 2011-08-10
      相关资源
      最近更新 更多