如何防止UILabel比其他对象更进一步移动

时间:2015-05-31 17:17:17

标签: ios swift nslayoutconstraint

我正在尝试使用动画移动标签,但我希望它在两个其他对象之间。我想我可以使用像

这样的NSLayoutConstraints
    let labelLeftConstraint = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.GreaterThanOrEqual, toItem: self.leftObject, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
    let labelRightConstraint = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.LessThanOrEqual, toItem: self.rightObject, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
    let labelBottom = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self.bottomObject , attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    let labelCenterX = NSLayoutConstraint(item: self.label, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.movingObject, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0)

    label.setTranslatesAutoresizingMaskIntoConstraints(false)
    self.view.addSubview(label)
    self.view.addConstraints([labelLeftConstraint, labelRightConstraint, labelBottom, labelCenterX])

我正在尝试用

更新位置
    UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
        self.movingObject.center = CGPoint(x: newX, y: newY)
        self.view.updateConstraints()
    }

但是当movingObject移动太远时,它会裁剪标签(这显然是有意义的,因为labelCenterX应该等于movingObject)。如何阻止此操作,而只是将其移至leftObjectrightObject的边缘?对于关系......我需要像.LessEqualOrGreater这样的东西。

我还尝试使用.center方法为标签制作动画,但我没有找到办法防止它从两个对象中脱离。



谢谢你的帮助(我知道我可能会问一个愚蠢的问题,但我只是在学习Swift)



修改 这是我的问题的屏幕截图: The thing I try to animate

movingObject是自行车的图片,它从左到右以不断变化的速度移动,并且允许比标签上的速度更快,速度超过条形。此标签应仅在030 - 标签

之间

编辑2: 工作代码位于我的Git repository

1 个答案:

答案 0 :(得分:3)

解决方案是创建所需的前导/尾随约束> = 0和具有较低优先级的centerX约束,然后将centerX常量更改为您需要的任何内容。