作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我有一个移动 UIImageView 的 Pan Gesture,它使用类似这样的东西连续改变图像的中心:
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
}
我还想每秒更改一次文本标签(计时器),并且由于自动布局格式,这会将移动的 UIImageView 重置为默认约束。我已经看到移动 UIImageViews 的正确方法是更改 UIImageView 的约束而不是中心。有没有办法改变 UIImageView 的约束以适应图像的当前位置?我尝试使用
view.updateConstraints()
但这并没有解决问题。理想情况下,在 Storyboard上手动设置约束时,它的行为类似于“重置为建议的约束”选项,但在 ViewController 类中使用。我试图避免将所有约束设置为 IBOutlets 并像那样编辑它们,因为我有很多图像具有多个约束和多个需要修改的平移手势。
最佳答案
我认为没有办法自动重置为建议的约束条件。您可以通过更新约束中的常量来手动执行此操作。
您不能将位置约束设置为常量,因此您需要从相对于另一个对象的约束开始并修改它们。例如,设置中心以匹配父 View 的中心,然后更改常量使其移动以匹配当前状态。
为此,您需要引用约束。您可以在 Interface Builder 中制作您的 NSLayoutConstraints
并使用 IBOutlets
链接到它们,或者只是以编程方式创建它们。对于后者,将它们声明为 View Controller 的实例属性,然后在其 viewDidLoad()
中创建它们,如下所示:
horizontalConstraint = NSLayoutConstraint(item: x.view, attribute: .centerX, relatedBy: .equal, toItem: x.view.superview, attribute: .centerX, multiplier: 1, constant: 0)
verticalConstraint = NSLayoutConstraint(item: x.view, attribute: .centerY, relatedBy: .equal, toItem: x.view.superview, attribute: .centerY, multiplier: 1, constant: 0)
x.view.superview.addConstraints([horizontalConstraint, verticalConstraint])
当你想更新它们时,只需更改常量即可:
let superview = x.view.superview
let currentOffsetX = x.view.center.x - superview.center.x
let currentOffsetY = x.view.center.y - superview.center.y
horizontalConstraint.constant = currentOffsetX
verticalConstraint.constant = currentOffsetY
关于ios - 以编程方式重置对屏幕位置的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44347657/
我是一名优秀的程序员,十分优秀!