[英]Moving a UIView while changing its nested UILabel causes the view to jump back to initial position
我正在尝试设置UISlider,以便在移动滑块时,拇指矩形上方会出现一个气泡,以显示当前值设置为什么。
单独移动视图的效果很好,但是当更改该视图内标签的值时,标签将快速“跳回”到我将UIView放置在情节提要板上的初始位置,当滑块碰到特定位置时跟踪。 然后,一旦拇指矩形移过轨道上的那个1像素,它就会跳回。
我已经制作了一个示例项目,可在此处复制该问题: https : //github.com/austinmckinley/SliderBubbleTest
另外,这是我的ViewController的外观。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var slider: UISlider!
@IBOutlet weak var bubble: UIView!
@IBOutlet weak var bubbleLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func sliderMoved(sender: UISlider) {
let sliderValue = lroundf(sender.value)
let trackRect = sender.trackRectForBounds(sender.frame)
let thumbRect = sender.thumbRectForBounds(sender.bounds, trackRect: trackRect, value: Float(sliderValue))
bubble.center.x = thumbRect.midX
slider.value = Float(sliderValue)
// If this next line is commented, the jumping issue does not occur.
bubbleLabel.text = String(sliderValue)
}
}
自动版式会将气泡视图移回其约束所指定的位置。 代替改变气泡视图的帧的,创建一个@IBOutlet
到NSLayoutContraint
水平地定位所述气泡,然后改变constant
该约束的属性来移动气泡。
如果将气泡的水平约束设为: Bubble.CenterX == Superview.Leading
,并将约束出口添加到代码中:
@IBOutlet weak var bubbleCenterX: NSLayoutConstraint!
然后,您只需要替换以下内容:
bubble.center.x = thumbRect.midX
与:
bubbleCenterX.constant = thumbRect.midX
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.