Ios 如何通过动画使UIView从另一个UIView的一侧显示出来?
我正在我的项目中使用swift。在这个项目中,我在UIViewController中有一个UIView(称为mySubView1),在mySubView1(mySubView2包含一些要显示的数据)中有另一个UIView(称为mySubView2)。 像这样:Ios 如何通过动画使UIView从另一个UIView的一侧显示出来?,ios,swift,Ios,Swift,我正在我的项目中使用swift。在这个项目中,我在UIViewController中有一个UIView(称为mySubView1),在mySubView1(mySubView2包含一些要显示的数据)中有另一个UIView(称为mySubView2)。 像这样: +++++++++++++++++++++++++++++++++++++++++++ | | |
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | ++++++++++++++++++ | |
| ++++++++++++++++++++++++ |
| |
| |
| |
| |
+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | | | | |
| +++| |++| |
| | someData | |
| | | |
| ++++++++++++++++++ |
| |
+++++++++++++++++++++++++++++++++++++++++++
然后mySubView2从mySubView1中出来,并通过如下动画传递mySubView1的底部:
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | ++++++++++++++++++ | |
| ++++++++++++++++++++++++ |
| |
| |
| |
| |
+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++
| |
| |
| myViewController |
| |
| ++++++++++++++++++++++++ |
| | mySubView1 | |
| | | |
| | ++++++++++++++++++ | |
| | | mySubView2 | | |
| | | | | |
| +++| |++| |
| | someData | |
| | | |
| ++++++++++++++++++ |
| |
+++++++++++++++++++++++++++++++++++++++++++
设想一台打印机在纸上打印一些数据(myViewController作为打印机,mySubView1作为打印机输出,mySubView2作为纸张)
更新:
我正在我的项目中使用NSLAYOUTACHOR:
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()
}
}
方法是:
- 将
和mySubView1
添加为视图控制器的子视图mySubView2
- 将
发送到低于mySubView1
mySubView2
- 使用这两个调用实现上一步:
self.view.sendSubview(toBack:mySubView1)
self.view.bringSubview(toFront:mysubview 2)
- 设置
边界的动画,使其沿mySubView2
方向增长Y
subView1
和subView2
添加为ViewController
的视图的子视图
子视图2
提供了高度锚定
约束subView2
的heightAnchor
约束的常量值,并在UIView.animate
的完成块内调用view.layoutSubViews()
有几件事可以做。如果您可以显示您添加的约束或任何您更新了我的问题的内容,这将非常有用。我正在项目中使用NSLAYOUTACHOR。