我想实现一个可拖动的按钮(在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))!"
}
}
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
您的按钮出现故障,因为当您更新标签时,自动布局正在运行,并将您的按钮恢复到其约束所应该的位置。使用自动布局时,您不应该更新按钮的框架。
相反,在 Interface Builder 中添加一个约束来将按钮相对于其超视图的前沿定位。然后通过 Control - 从约束(您可以在文档大纲视图中找到它)对代码添加IBOutlet
到此约束。给它命名为buttonH
。
然后在您的代码中,更新约束的constant
属性以移动按钮:
buttonH.constant += delta_x