gpt4 book ai didi

ios - 避免 View 约束干扰框架更改

转载 作者:行者123 更新时间:2023-11-28 05:46:56 24 4
gpt4 key购买 nike

我正在开发一个 slider ,它会在移动时更新特定标签的值。 slider 中的栏有一个垂直约束,以使其恰好位于另一个元素之上,另一个约束使其水平居中。

如果我不更新标签,使用 PanGestureRecognizer 更改栏的位置效果很好:

@IBAction func handlePan(recognizer: UIPanGestureRecognizer) {
let translation = recognizer.translation(in: self.view)
if let meterView = recognizer.view {

let minX = view.bounds.minX + meterView.bounds.width/2
let maxX = view.bounds.maxX - meterView.bounds.width/2
var resultingX = meterView.center.x + translation.x
resultingX = resultingX < minX ? minX : resultingX
resultingX = resultingX > maxX ? maxX : resultingX

meterView.center = CGPoint(x: resultingX,
y: meterView.center.y)

updateHeight(at: meterView.center.x/(maxX-minX))
}
recognizer.setTranslation(CGPoint.zero, in: self.view)
}

func updateHeight(at percentage: CGFloat) {
let percentage = Float(percentage)
heightLabel.text = String((maxHeight - minHeight)*percentage)
}

但是,如果我在该平移的任何一点(在平移期间或结束时)更改标签,我想,由于约束,条会跳回水平中心。

如果我在平移过程中消除了水平(或所有)约束,那么当我轻轻平移时,该条会完全跳出屏幕。

有没有办法避免 Controller 将条形 View 更新回其约束定义的位置?

enter image description here

谢谢!

最佳答案

删除居中栏的约束,并将其更改为与 meterView(我假设 meterView 是栏)相关的左约束及其父 View 宽度:

meterView.left equal to Superview.left + constant

现在创建对名为 meterViewLeftConstraint 的约束的引用,并在 handlePan 中,将约束的 constant 属性更新为 resultingX:

meterViewLeftConstraint.constant = resultingX

而且你现在不需要设置center

我也推荐你使用SnapKit进行约束,因为 NSLayoutConstraint API 非常困惑。

关于ios - 避免 View 约束干扰框架更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294738/

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