编程的新手。还有,我的第一篇文章。我确实试着对此做了一些研究,我确实找到了一些帖子,但大多数都是几年前的,或者不是iOS的。
在一个iOS应用程序中,我试图将可点击的按钮放在一些设备的机械面板的高清晰度图像上。这个想法是,用户可以放大图像,点击开关,并得到一个弹出窗口,解释开关的用途。
在看了一些视频后,我能够创建一个UIScrollView,并将高清图像的UIImageView放入其中。我可以很好地放大/缩小和移动面板。
我认为使用UIButton来定义面板的“可点击”区域将是一种方法(不确定这是否是最好的方法)。然而,这些按钮给我带来了一些问题:
放大后,相对于HD图像,按钮不会停留在相同的像素上,按钮的大小也不会随着缩放而“增长”。因此,当放大时,按钮覆盖的区域较小,并且不在正确的位置上。
我已经尝试应用相对于高清图像的约束,以及相对于滚动视图的约束。我试着把图片和按钮放在一起。显然,这里我遗漏了一些基础知识。看起来这对我来说有点太高级了。
有什么关于如何解决这个问题的建议吗?另外,尝试点击手势而不是UIButtons是不是更好呢?
谢谢您抽时间见我!附言:任何关于这个主题的教程视频或文章都将不胜感激。
发布于 2016-07-24 00:05:05
我终于找到了答案。这很简单。需要将该按钮添加为图像所在的imageView的子视图。我不能通过接口做到这一点,只能通过这样的编程方式:
imageView.addSubview(button)看起来,斯威夫特会处理剩下的事情。该按钮与图像完美地同步移动和缩放。
发布于 2016-07-13 23:14:18
一个想法是使按钮成为滚动视图的父级(滚动视图的兄弟)的子级,在滚动视图之后排序,这样它就位于顶部。
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也是如此
https://stackoverflow.com/questions/38355060
复制相似问题