【问题标题】:How to zoom an image without zooming sub views in iPhone?如何在不缩放 iPhone 中的子视图的情况下缩放图像?
【发布时间】:2012-10-17 11:22:46
【问题描述】:

我有 UIImageView init 的滚动视图。我在 UIImageView 上添加了一个按钮。当我缩放图像时,我的按钮也执行缩放。我怎样才能只缩放图像而不是按钮。提前感谢您的时间。

【问题讨论】:

  • 您好 Bharathi D,感谢您的快速回复,但这并不能解决我的问题,因为当我缩放图像时,UIIMageView 中实际子视图的按钮也是缩放。我想要一种我的按钮不会缩放及其在图像上的位置将保持不变。提前致谢。
  • 此问题的任何相关代码块?
  • 请删除带有代码的 cmets 并使用问题下方的 Edit 按钮将其移动到 OP。
  • 实际上没有不同的代码,我只是采用滚动视图。然后我启用滚动属性。之后我在其中子视图 UIImageView。在这个图像视图中我启用用户交互。之后,我在 UIImageView 中查看 UIButton。现在,当我缩放 ScrollView(意味着我缩放图像)时,我的 UIBUtton(这是在 UIImageView 中)也是缩放的,我希望我缩放 UIImageView 但 UIButton 不会缩放。谢谢你。

标签: iphone ios xcode ios-simulator


【解决方案1】:

将按钮和您不希望受到UIScrollView 影响的任何其他视图放大到与UIScrollView 相同级别的视图中。这是一个为此目的而设置的示例视图层次结构。

滚动视图和其中的任何内容都会缩放(在本例中为图像视图)。 在滚动视图下方的 UIView 中(在这种情况下,带有 Default.png 图像的图像视图)在滚动视图缩放时不会缩放。

编辑:

要让按钮相对于图像保持在同一位置,请将其作为子视图添加到滚动视图中,请将 UIScrollViewDelegate 添加到视图控制器标题中。在您的视图控制器实现中:捕获viewWillAppear 中的初始UIButton 框架,并使用滚动视图委托scrollViewDidZoom 方法更新按钮框架,使其保持原位。这也将允许按钮在平移时随图像一起移动。

这是更新后的视图结构:

适用的视图控制器代码段:

@interface MyViewController () {
    CGRect initialButtonFrame;

    ...
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    initialButtonFrame = self.button.frame;

    ...
}

- (void)scrollViewDidZoom:(UIScrollView *)sv
{

        self.button.frame = CGRectMake((initialButtonFrame.origin.x * self.scrollView.zoomScale),
                               (initialButtonFrame.origin.y * self.scrollView.zoomScale),
                               initialButtonFrame.size.width,
                               initialButtonFrame.size.height);

...
}

这里有几张图片显示了按钮相对于它在图片中的位置保持在适当的位置。请注意,当未缩放时(第一张图片)和缩放时(第二张图片),按钮原点位于靠近消防员外套中心底部的红色区域的左上角。

【讨论】:

  • 感谢您的关注,但如果我在任何其他视图上添加按钮,则它不会缩放,但图像会缩放并且按钮相对于图像的位置也会改变。我想要图像会缩放,按钮不会缩放(按钮大小保持不变),按钮相对于图像的位置保持不变。谢谢。
  • 感谢您的建议,但我已经尝试过了。我需要更改按钮相对于图像的位置。如果我按照您的方式进行操作,那么按钮将显示在屏幕上,图像将在其后面放大以便定位图像上的按钮不会随着图像缩放而改变。
  • 谢谢 bobnoble...但是它的位置没有适当地改变。好像图像上有一个红色标记,我在图像上添加了一个按钮,因为按钮的角会碰到红色标记。然后当我缩放图像时,按钮改变它的位置,红色标记和按钮将移开。所以这不能解决问题。我需要在缩放时保持(红色标记和按钮)在一起。
  • 让我澄清一下,按钮位置更改为scrollViewDidZoom 以使其靠近红色标记或任何其他区域,新的位置计算取决于您。我认为上面的答案中缺少的是坐标(不是尺寸)缩放,您需要将坐标乘以滚动视图zoomScale 值。也可以通过这个方法设置scrollview子视图的位置,有兴趣的可以自己试试。
  • @Jack_iPhone - 正如 A-Live 所建议的,这是使用滚动视图 zoomScale 的问题。我修改了scrollViewDidZoom 中的按钮框架计算,并添加了几张图像来显示按钮相对于图像视图在未缩放和缩​​放时的位置。
【解决方案2】:

imageScrollView 之后的imageScrollView 父视图上添加按钮,以便该按钮不是滚动视图的子视图。

【讨论】:

  • 你能不能再澄清一下..我不太明白。
猜你喜欢
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多