修改约束

时间:2015-05-18 09:50:47

标签: ios swift autolayout

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

我从桨开始。我创建了一个 A B C D 1 Lower Limit Upper Limit # Data 2 30S 40S A1234 30A 3 30S 40S A2345 30S 4 30S 40S A1256 30S ,它将成为游戏的容器。我还创建了gameView并添加了将paddle放在正确位置的约束。这就是我所拥有的:

enter image description here

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

问题在于:当我改变方向时,不管改变前的位置如何,桨都会移动到中心位置。

enter image description here enter image description here

我尝试创建center.x的插座,在Center X Alignment Constraint中将其删除,然后恢复viewWillTransitionToSize中的先前位置,但划线viewDidLayoutSubviews始终为0。我也尝试修改约束,可能会更改origin.x,但仍然不成功。

我知道这是一个简单的解决方案,但我无法找到它。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

@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
    }

}
相关问题