如何获得随机CGFloat的约束?

时间:2015-12-27 19:22:16

标签: ios swift2 arc4random cgfloat

我正试图在swift中随机化一个按钮的前导约束。要激活它,我选择一个按钮。当我第一次选择按钮时,它运行良好,但在此之后的所有时间,它在NSLog中显示了很多错误。这是代码:

let button = UIButton()
@IBAction func start(sender: UIButton) {
     let randomNumber = Int(arc4random_uniform(180) + 30)
     let cgfloatrandom = CGFloat(randomNumber)
     button.hidden = false
     button.translatesAutoresizingMaskIntoConstraints = false
     NSLayoutConstraint.activateConstraints([
        button.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: cgfloatrandom),
        button.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 390),
        button.widthAnchor.constraintEqualToConstant(75),
        button.heightAnchor.constraintEqualToConstant(75)
        ])
}

请帮忙。谢谢。安东

1 个答案:

答案 0 :(得分:2)

问题是您是否已经对已经适当约束的按钮添加约束。虽然您可以删除所有约束并重新创建它们,但这样做效率非常低,不建议使用。

我建议只保留对前导约束的引用,这样每次点击按钮修改constant时都可以访问它。

为此,请为您的前导约束实现一个属性,如下所示:

var leadingConstraint: NSLayoutConstraint!

创建此按钮时,您也希望正确约束它。您可以在此处创建特殊的主要约束。这是在按钮动作功能之外完成的,可能在viewDidLoad

button = UIButton() 
button.translatesAutoresizingMaskIntoConstraints = false
//...

leadingConstraint = button.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: 0)

NSLayoutConstraint.activateConstraints([
    leadingConstraint,
    button.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 390),
    button.widthAnchor.constraintEqualToConstant(75),
    button.heightAnchor.constraintEqualToConstant(75)
])

现在,当点击按钮时,您不需要设置translatesAutoresizingMaskIntoConstraints,您只需更新现有主要约束的constant

@IBAction func start(sender: UIButton) {
     button.hidden = false

     let randomNumber = Int(arc4random_uniform(180) + 30)
     leadingConstraint.constant = CGFloat(randomNumber)
}