首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS修复UIButton在可缩放图像上的位置,以便与图像一起缩放

iOS修复UIButton在可缩放图像上的位置,以便与图像一起缩放
EN

Stack Overflow用户
提问于 2016-07-13 22:51:18
回答 2查看 620关注 0票数 1

编程的新手。还有,我的第一篇文章。我确实试着对此做了一些研究,我确实找到了一些帖子,但大多数都是几年前的,或者不是iOS的。

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

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

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

放大后,相对于HD图像,按钮不会停留在相同的像素上,按钮的大小也不会随着缩放而“增长”。因此,当放大时,按钮覆盖的区域较小,并且不在正确的位置上。

我已经尝试应用相对于高清图像的约束,以及相对于滚动视图的约束。我试着把图片和按钮放在一起。显然,这里我遗漏了一些基础知识。看起来这对我来说有点太高级了。

有什么关于如何解决这个问题的建议吗?另外,尝试点击手势而不是UIButtons是不是更好呢?

谢谢您抽时间见我!附言:任何关于这个主题的教程视频或文章都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-07-24 00:05:05

我终于找到了答案。这很简单。需要将该按钮添加为图像所在的imageView的子视图。我不能通过接口做到这一点,只能通过这样的编程方式:

代码语言:javascript
复制
imageView.addSubview(button)

看起来,斯威夫特会处理剩下的事情。该按钮与图像完美地同步移动和缩放。

票数 1
EN

Stack Overflow用户

发布于 2016-07-13 23:14:18

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

代码语言:javascript
复制
     parent view  (probably the view controllers view)
          |
    |-----------|
scrollView    button

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

代码语言:javascript
复制
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的代理来使框架保持最新...

代码语言:javascript
复制
self.scrollView.delegate = self;

并找出偏移或缩放级别随以下内容更改的时间:

代码语言:javascript
复制
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    self.button.frame = // ... as above
}

scrollViewDidZoom:(UIScrollView *)scrollView也是如此

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38355060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档