我正在尝试使用动画移动标签,但我希望它在两个其他对象之间。我想我可以使用像
这样的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
)。如何阻止此操作,而只是将其移至leftObject
和rightObject
的边缘?对于关系......我需要像.LessEqualOrGreater
这样的东西。
我还尝试使用.center
方法为标签制作动画,但我没有找到办法防止它从两个对象中脱离。
谢谢你的帮助(我知道我可能会问一个愚蠢的问题,但我只是在学习Swift)
修改
这是我的问题的屏幕截图:
movingObject是自行车的图片,它从左到右以不断变化的速度移动,并且允许比标签上的速度更快,速度超过条形。此标签应仅在0
和30
- 标签
编辑2: 工作代码位于我的Git repository
中答案 0 :(得分:3)
解决方案是创建所需的前导/尾随约束> = 0和具有较低优先级的centerX约束,然后将centerX常量更改为您需要的任何内容。