Ios Xcode 8/Swift 3-如何将按钮约束锁定为收缩以缩放图像,使其随图像放大和缩小?

Ios Xcode 8/Swift 3-如何将按钮约束锁定为收缩以缩放图像,使其随图像放大和缩小?,ios,iphone,swift,xcode,swift3,Ios,Iphone,Swift,Xcode,Swift3,我有一个带有滚动视图的视图控制器,视图中有一个类似地图的图像。在地图图像的顶部,我有16个不同的pin按钮,指向地图图像上的不同部分。到目前为止,我可以放大和缩小地图,但16个按钮没有跟随,并且变得分散。如何将按钮附加或锁定到地图图像上,使其与地图一起放大和缩小。到目前为止,在我的地图视图控制器中,我有以下内容:(提前感谢您的回答!) 粗略地说,我想这就是你想要的东西: 您可以通过创建图像视图的按钮子视图或(正如我在这里所做的)创建“容器视图”的按钮和图像视图子视图来实现这一点,该“容器视图”

我有一个带有滚动视图的视图控制器,视图中有一个类似地图的图像。在地图图像的顶部,我有16个不同的pin按钮,指向地图图像上的不同部分。到目前为止,我可以放大和缩小地图,但16个按钮没有跟随,并且变得分散。如何将按钮附加或锁定到地图图像上,使其与地图一起放大和缩小。到目前为止,在我的地图视图控制器中,我有以下内容:(提前感谢您的回答!)


粗略地说,我想这就是你想要的东西:

您可以通过创建图像视图的按钮子视图或(正如我在这里所做的)创建“容器视图”的按钮和图像视图子视图来实现这一点,该“容器视图”除了作为滚动视图的可缩放子视图之外,没有其他用途

以下是我的视图层次结构:

以下是唯一的代码:

class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var sv: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sv.minimumZoomScale = 1
        self.sv.maximumZoomScale = 2
    }

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return scrollView.viewWithTag(999) // the container view
    }

}

“在地图图像的顶部”,但它们不是子视图?它们是什么?显示pin按钮是如何到达那里的。我是xcode新手,所以我不确定你的意思是什么?这是我的一张图片:对,这些不是地图图像视图的子视图。如果将它们设置为子视图,则它们将在地图缩放时相对于地图保持静止(尽管默认情况下,它们将在地图缩放时增长/收缩;但是,您可以更改这一点)还有一个gif,我的问题是,当放大时,我不知道如何将按钮锁定在地图上移动:如果它像你说的“子视图”一样简单,我该怎么做?你有关于如何做的链接或视频吗?谢谢你的帮助!非常感谢@matt这正是我要找的,在互联网上找不到。我真的很感谢你在这方面的帮助!你太棒了!嘿,马特,还有一个问题要问你。完成上述操作后,约束按钮的最佳方法是什么,以便在不同的设备上,按钮在地图上保持锁定位置?在放大和缩小我在(iPhone7)上制作的设备时,它工作得很好,但在其他设备上,我不知道如何添加变成蓝色的约束。我在google上看过,但显示约束的每个页面/教程都没有我拥有的层次结构/设置类型。提前谢谢。我是新手…最简单的就是没有约束。只要地图在每台设备上的大小相同,按钮就会位于正确的位置。否则,您必须根据图像大小的百分比(
乘数
)计算出上/左按钮,以使它们位于地图本身的同一位置。嘿@matt在上面的层次示例中,您会设置哪些约束来保持地图的位置?约束条件是什么?我觉得我已经尝试了所有类型的约束,但无法使其工作我已经用我正在做的地图应用程序达到了这个程度。你能帮我吗?我在地图上找到了按钮,可以在ipad以外的所有设备上使用。按钮只是散在一起,位置不正确。这里有一个问题的答案。(我的电脑有点慢,请给它时间加载)
class ViewController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var sv: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sv.minimumZoomScale = 1
        self.sv.maximumZoomScale = 2
    }

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return scrollView.viewWithTag(999) // the container view
    }

}