gpt4 book ai didi

ios - 以编程方式重置对屏幕位置的约束

转载 作者:行者123 更新时间:2023-11-28 08:08:45 25 4
gpt4 key购买 nike

目前,我有一个移动 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com