【问题标题】:Modifying Constraints修改约束
【发布时间】:2015-05-18 09:50:47
【问题描述】:

作为学习 Swift 和 iOS 开发的练习,我决定制作 Breakout 游戏。一开始我遇到了一个简单的问题,我找不到简单的解决方案。

我从桨开始。我创建了一个gameView,它将作为游戏的容器。我还创建了paddleView 并添加了将桨放在正确位置的约束。这是我所拥有的:

我还添加了一个平移手势识别器,用于定位球拍的center.x 位置。

问题是:当我改变方向时,无论改变之前的位置如何,桨都会移动到中心。

我尝试创建Center X Alignment Constraint 的出口,在viewWillTransitionToSize 中删除它,并在viewDidLayoutSubviews 中恢复之前的位置,但paddle 的origin.x 始终为0。我还尝试修改约束,可能会更改@987654332 @,但仍然不成功。

我知道有一个简单的解决方案,但我找不到。

有人可以帮忙吗?

【问题讨论】:

    标签: ios swift autolayout


    【解决方案1】:

    您不应在平移手势处理程序中修改 view center.x,因为您的约束将被打破。相反,您应该创建约束出口(假设约束:view.center.x 等于 superview.center.x)并在您的平移处理程序中更改其常量值。

    @IBOutlet weak var centerAlignment: NSLayoutConstraint!
    
    @IBAction func handleDrag(sender: UIPanGestureRecognizer) {
    
        let xPosition = sender.locationInView(self.view).x
    
        if  xPosition >= 0 && xPosition <= self.view.frame.size.width{
    
            centerAlignment.constant = xPosition - self.view.frame.size.width / 2
    
        } else if xPosition > self.view.frame.size.width {
    
            centerAlignment.constant = self.view.frame.size.width / 2
    
        } else {
    
            centerAlignment.constant = -self.view.frame.size.width / 2
        }
    
    }
    

    【讨论】: