新人在这里编程。另外,我的第一篇文章。我确实尝试对此进行一些研究,我确实找到了一些线程,但大多数是几年或不适用于iOS。
在iOS应用程序中,我尝试将可点击按钮放在某些设备的机械面板的高清图像上。这个想法是用户可以放大图像,点击即切换,然后弹出一个解释开关的用途。
观看了一些视频后,我能够创建一个UIScrollView并将高清图像的UIImageView放入其中。我可以放大/缩小并移动面板。
我想用UIButton来定义"可点击的"小组的各个方面是一种方法(不确定这是否是最好的方法)。但是,按钮给了我一些问题:
放大后,按钮不会相对于高清图像停留在相同的像素上,并且按钮的大小不会增长"用缩放。因此,当放大时,按钮覆盖的区域较小,并且不在正确的位置。
我试图相对于高清图像应用约束,也相对于滚动视图。我试图将图像和按钮放入堆栈。显然,我在这里缺少一些基础知识。对于我所在的地方来说,这似乎有点过于先进。
关于如何解决这个问题的任何想法?此外,尝试使用轻击手势而不是UIButtons会更好吗?
感谢您的时间! PS:任何有关此主题的教程视频或文章都将不胜感激。
答案 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知道它自己的contentOffset
和zoomScale
,就这些值进行计算。只要您使用该代码段设置按钮的框架,该框架将在图像空间中保持固定为imageButtonFrame。
通过成为scrollView ...
的委托来使框架保持最新状态self.scrollView.delegate = self;
找出偏移或缩放级别何时改变:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
self.button.frame = // ... as above
}
scrollViewDidZoom:(UIScrollView *)scrollView