Swift - 更新标签时拖动毛刺

时间:2015-01-13 14:21:18

标签: ios swift

我想实现一个可拖动的按钮(在x-asis上),它可以正常使用下面的代码:

将被拖动的按钮位于mainButton内部(从左侧开始对齐)

@IBAction func wasDragged(buttn: UIButton, event :UIEvent)
{
    var touch : UITouch = event.touchesForView(buttn)?.anyObject() as UITouch
    var previousLocation : CGPoint = touch.previousLocationInView(self.view)
    var location : CGPoint = touch.locationInView(self.view)

    if buttn.frame.minX + delta_x > mainButton.frame.minX && buttn.frame.maxX + delta_x < mainButton.frame.maxX{
        buttn.center = CGPointMake(buttn.center.x + delta_x,buttn.center.y)
    }
}

但是,当我添加一行来更新屏幕上的另一个标签时,如下所示,当标签更新时,按钮开始出现故障

@IBAction func wasDragged(buttn: UIButton, event :UIEvent)
{
    var touch : UITouch = event.touchesForView(buttn)?.anyObject() as UITouch
    var previousLocation : CGPoint = touch.previousLocationInView(self.view)
    var location : CGPoint = touch.locationInView(self.view)

    var delta_x :CGFloat = location.x - previousLocation.x
    if buttn.frame.minX + delta_x > mainButton.frame.minX && buttn.frame.maxX + delta_x < mainButton.frame.maxX{
        buttn.center = CGPointMake(buttn.center.x + delta_x,buttn.center.y)

        self.statusLabel.text = "Time left:(\(timeLeft))!"
    }
}

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您的按钮出现故障,因为当您更新标签时,自动布局正在运行,并将您的按钮恢复到其约束所应该的位置。使用自动布局时,您不应该更新按钮的框架。

相反,在 Interface Builder 中添加一个约束来将按钮相对于其超视图的前沿定位。然后通过 Control - 从约束(您可以在文档大纲视图中找到它)对代码添加IBOutlet到此约束。给它命名为buttonH

然后在您的代码中,更新约束的constant属性以移动按钮:

buttonH.constant += delta_x