Я использую в своем проекте swift. в этом проекте у меня есть один UIView (называемый mySubView1) внутри UIViewController, а другой (называемый mySubView2) внутри mySubView1 (mySubView2 содержит некоторые данные для отображения). вот так:
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | ++++++++++++++++++ | |
| ++++++++++++++++++++++++ |
| |
| |
| |
| |
+++++++++++++++++++++++++++++++++++++++++++
тогда mySubView2 выходит из mySubView1 и передает нижнюю часть mySubView1 с анимацией, подобной этой:
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | | | | |
| +++| |++| |
| | someData | |
| | | |
| ++++++++++++++++++ |
| |
+++++++++++++++++++++++++++++++++++++++++++
представьте себе принтер, который печатает некоторые данные на бумаге (myViewController как принтер и mySubView1 в качестве вывода на принтер, а mySubView2 в качестве бумаги)
ОБНОВЛЕНО: Я использую NSLayoutAnchor в своем проекте:
override func viewDidLoad() {
super.viewDidLoad()
let heightAnchor: NSLayoutConstraint
let mySubView1 = UIView()
mySubView1.translatesAutoresizingMaskIntoConstraints = false
mySubView1.backgroundColor = .blue
view.addSubview(mySubView1)
mySubView1.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
mySubView1.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
mySubView1.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
mySubView1.heightAnchor.constraint(equalToConstant: 100).isActive = true
let mySubView2 = UIView()
mySubView2.clipsToBounds = true
mySubView2.translatesAutoresizingMaskIntoConstraints = false
mySubView2.backgroundColor = .yellow
view.addSubview(mySubView2)
mySubView2.topAnchor.constraint(equalTo: mySubView1.topAnchor, constant: 40).isActive = true
mySubView2.centerXAnchor.constraint(equalTo: mySubView1.centerXAnchor).isActive = true
mySubView2.widthAnchor.constraint(equalTo: mySubView1.widthAnchor, constant: -40).isActive = true
heightAnchor = mySubView2.heightAnchor.constraint(equalToConstant: 100)
heightAnchor.isActive = true
heightAnchor.constant = 500
UIView.animate(withDuration: 3) {
mySubView2.layoutIfNeeded()
}
}