【问题标题】:iOS Fix the location of a UIButton over a zoomable image so it zoomed and scaled with the imageiOS 修复 UIButton 在可缩放图像上的位置,使其随图像一起缩放
【发布时间】:2016-11-16 05:46:54
【问题描述】:

这里是编程新手。另外,我的第一篇文章。我确实尝试对此进行一些研究,并且确实找到了一些线程,但大多数都是几年前的,或者不适用于 iOS。

在 iOS 应用程序中,我试图将可点击按钮放置在某些设备的机械面板的高清图像上。这个想法是用户可以放大图像,点击,即开关,然后弹出一个解释开关用途的弹出窗口。

在观看了一些视频后,我能够创建一个 UIScrollView 并将高清图像的 UIImageView 放入其中。我可以放大/缩小并很好地移动面板。

我认为使用 UIButton 来定义面板的“可点击”区域将是一种方法(不确定这是否是最佳方法)。但是,这些按钮给我带来了一些问题:

放大后,按钮不会停留在与高清图像相关的相同像素上,并且按钮的大小不会随着缩放而“变大”。所以当放大时,按钮覆盖的区域更小,并且不在正确的位置。

我尝试应用相对于高清图像和滚动视图的约束。我试图将图像和按钮放入堆栈。显然,我在这里缺少一些基础知识。对我现在的情况来说,这似乎有点太高级了。

关于如何解决这个问题的任何想法?另外,尝试点击手势而不是 UIButton 会更好吗?

感谢您的宝贵时间! PS:任何有关此主题的教程视频或文章将不胜感激。

【问题讨论】:

    标签: ios uiscrollview uiimageview uibutton uiimage


    【解决方案1】:

    我终于找到了答案。这很简单。该按钮需要添加为图像所在的 imageView 的子视图。我无法通过界面执行此操作,只能以这样的方式编程:

    imageView.addSubview(button)
    

    看来,Swift 会处理剩下的事情。按钮与图像完美地移动和缩放。

    【讨论】:

      【解决方案2】:

      一个想法是让按钮成为滚动视图父级的子级(滚动视图的兄弟),在滚动视图之后排序,使其位于顶部。

           parent view  (probably the view controllers view)
                |
          |-----------|
      scrollView    button
      

      假设在滚动或缩放滚动条之前,您希望按钮出现在CGRect imageButtonFrame = CGRectMake(10,20,80,40)。我们可以说这些坐标在“图像空间”中。将这些映射到滚动视图的兄弟的函数如下所示:

      UIView *parentView = self.view;  // this assumes both button and scrollView are children of the view controller's view
      self.button.frame = [scrollView convertRect:imageButtonFrame toView:parentView];
      

      这样做的好处是 UIScrollView,知道它自己的 contentOffsetzoomScale,对这些值进行计算。只要您使用该代码 sn-p 设置按钮的框架,该框架将在图像空间中保持固定为 imageButtonFrame。

      通过成为 scrollView 的委托来保持框架是最新的...

      self.scrollView.delegate = self;
      

      并找出偏移或缩放级别何时更改:

      - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
          self.button.frame = // ... as above
      }
      

      scrollViewDidZoom:(UIScrollView *)scrollView 也一样

      【讨论】:

      • danh,感谢您的回复!这个的实现似乎有点超出我的技能水平。我理解上面的概念似乎是客观的 c,我对 swift 几乎不熟悉。有没有我可以玩的 Swift 版本?
      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多