Я думал, что view.layoutSubviews()
вызывается один раз за кадр, чтобы избежать слишком много вычислений макета. Вот и вся причина существования view.setNeedsLayout()
. Так что вы можете вызывать view.setNeedsLayout()
много раз, в том числе много раз за кадр, но он вычисляется только один раз. Вот почему у вас также есть второй метод, view.layoutIfNeeded()
, который немедленно вычисляет макет.
Это не то, что здесь происходит:
class MyViewController: UIViewController {
var time = Date().timeIntervalSince1970
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .cyan
Timer.scheduledTimer(withTimeInterval: 0.001, repeats: true) { (timer) in
self.view.setNeedsLayout()
print("hello")
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let newDate = Date().timeIntervalSince1970
print("Layout called at time: \(newDate - time)")
time = newDate
}
}
Что здесь происходит "Вызов, вызванный во время ...", вызывается с интервалами 0,001.