Ios 避免视图约束干扰帧更改
我正在使用一个滑块,它在移动时会更新特定标签的值。滑块中的条有一个垂直约束,使其正好位于另一个图元的顶部,另一个约束使其水平居中 如果我不更新标签,使用Ios 避免视图约束干扰帧更改,ios,swift,nslayoutconstraint,Ios,Swift,Nslayoutconstraint,我正在使用一个滑块,它在移动时会更新特定标签的值。滑块中的条有一个垂直约束,使其正好位于另一个图元的顶部,另一个约束使其水平居中 如果我不更新标签,使用pangestrerecognizer更改条的位置将非常有效: @IBAction func handlePan(recognizer: UIPanGestureRecognizer) { let translation = recognizer.translation(in: self.view) if let meterVie
pangestrerecognizer
更改条的位置将非常有效:
@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)
}
@iAction func handlePan(识别器:UIPangestureRecognitizer){
let translation=recognizer.translation(在:self.view中)
如果让meterView=recognizer.view{
设minX=view.bounds.minX+meterView.bounds.width/2
设maxX=view.bounds.maxX-meterView.bounds.width/2
var resultingX=meterView.center.x+translation.x
结果x=resultingXmaxX?maxX:resultingX
meterView.center=CGPoint(x:resultingX,
y:meterView.center.y)
更新高度(位于:meterView.center.x/(maxX minX))
}
识别器.setTranslation(CGPoint.zero,in:self.view)
}
func updateHeight(百分比:CGFloat){
让百分比=浮动(百分比)
heightLabel.text=字符串((最大高度-最小高度)*百分比)
}
但是,如果我在平移的任何一点(在平移过程中或在平移结束时)更改标签,我想,由于约束,该条会跳回水平中心
如果我在平移过程中消除水平(或全部)约束,则该条将完全跳出屏幕,就像我轻微平移一样
是否有办法避免控制器将条形图更新回其约束定义的位置
谢谢 删除使条形图居中的约束,并将其更改为与其superview宽度相关的左侧约束(我假设
meterView
是条形图):
meterView.left equal to Superview.left + constant
现在,创建一个对该约束的引用,名为meterViewLeftConstraint
,并在handlePan
中,将约束的常量
属性更新为resultingX
:
meterViewLeftConstraint.constant = resultingX
现在不需要设置中心
我还建议您使用来生成约束,因为NSLayoutConstraint
API非常混乱。您不能更新约束的乘数,它是一个只读属性。@pckill我没有意识到这一点。已编辑。如果使用约束设置布局,则不要弄乱视图的框架,而是更改约束。我建议修改您的平移逻辑,以便使用自动布局更新条位置。