swift - 自动布局完成后调用的 Swift 方法
问题描述
我有一种方法可以在按下按钮时通过在滑块顶部添加 ImageView 来绘制图钉。这是代码:
var loopStartImageView : UIImageView = UIImageView()
func addLoopDrawing(at time: CMTime, for loop: Int) {
let imgHeight : CGFloat = 30
let imgWidth: CGFloat = 30
var pinImg : UIImage = UIImage(named: "pin2x")!
let inset = slider.frame.origin.x
let width = slider.bounds.width
let xPos : CGFloat = CGFloat((Float(time.seconds) / slider.maximumValue)) * width + inset - (imgWidth / 2)
var yPos : CGFloat = slider.frame.origin.y - (slider.frame.height / 2) - 3
let imgV = UIImageView(frame: CGRect(x: xPos, y: yPos, width: imgWidth, height: imgHeight))
imgV.image = pinImg
loopStartImageView = imgV
view.addSubview(loopStartImageView)
view.sendSubviewToBack(loopStartImageView)
}
当我不使用自动布局来设置滑块的位置时,绘图是正确的,但是一旦我这样做,它就会显示在实际定位的下方。
此方法在 viewDidLoad 中调用。我的猜测是,由于某种原因,调用 viewDidLoad 时未设置自动布局定位。
我想知道是否有一种方法可以在自动布局完全调整后调用?
//
这应该是这样的:
但这就是视图的加载方式(即使在 viewDidLayoutSubviews 中调用 addLoopDrawing 函数时)
解决方案
我想知道是否有一种方法可以在自动布局完全调整后调用?
那将是viewDidLayoutSubviews
。这是一个非常好的时间来做一些依赖于具有正确框架的事情的事情,但要注意:它可以被多次调用。因此,通常的做法是与 Bool 属性一起实现它以检查这是第一次。
另一方面,最好不要问这样的 xy 问题。滑块顶部的图像视图的想法似乎是错误的。描述你真正想做的事情可能会更好。