iOS修复UIButton在可缩放图像上的位置,以便使用图像

时间:2016-07-13 14:51:18

标签: ios uiscrollview uiimageview uibutton uiimage

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

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

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

我想用UIButton来定义"可点击的"小组的各个方面是一种方法(不确定这是否是最好的方法)。但是,按钮给了我一些问题:

放大后,按钮不会相对于高清图像停留在相同的像素上,并且按钮的大小不会增长"用缩放。因此,当放大时,按钮覆盖的区域较小,并且不在正确的位置。

我试图相对于高清图像应用约束,也相对于滚动视图。我试图将图像和按钮放入堆栈。显然,我在这里缺少一些基础知识。对于我所在的地方来说,这似乎有点过于先进。

关于如何解决这个问题的任何想法?此外,尝试使用轻击手势而不是UIButtons会更好吗?

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

2 个答案:

答案 0 :(得分:1)

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

imageView.addSubview(button)

看来,斯威夫特负责其余的事情。按钮正在移动并与图像完美对齐。

答案 1 :(得分:0)

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

     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,就这些值进行计算。只要您使用该代码段设置按钮的框架,该框架将在图像空间中保持固定为imageButtonFrame。

通过成为scrollView ...

的委托来使框架保持最新状态
self.scrollView.delegate = self;

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

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

scrollViewDidZoom:(UIScrollView *)scrollView

相同