在MacOS中也有类似于iOS的转场动画,但是因为没有UINavigationController自动管理,所以需要自己手动做一些操作。
还是直接上代码
class MTMainViewController: NSViewController {
// 构建需要相互转场的2个控制器,而本控制器作为管理者,有点像是UINavigationController的角色
var vc1 = MTMainViewController01.init(nibName: NSNib.Name(rawValue: "MTMainViewController01"), bundle: nil)
var vc2 = MTMainViewController02.init(nibName: NSNib.Name(rawValue: "MTMainViewController02"), bundle: nil)
override func viewDidLoad() {
super.viewDidLoad()
// 这里做一些基本的设置
vc1.view.wantsLayer = true
vc1.view.backgroundColor = NSColor.red
vc1.view.frame = view.bounds
vc2.view.wantsLayer = true
vc2.view.backgroundColor = NSColor.yellow
vc2.view.frame = view.bounds
// 一定要将这2个控制器添加到本控制器中管理
addChildViewController(vc1)
addChildViewController(vc2)
// 因为转场点击按钮是在子控制器中的,所以在这里设置一下方法
vc1.toVC2Btn.action = #selector(toNewVC)
vc2.backToVC1Btn.action = #selector(backToOldVC)
}
override func viewDidAppear() {
super.viewDidAppear()
// 需要将最开始需要显示的那个控制器添加到本控制器当中
view.addSubview(vc1.view)
}
@objc func toNewVC() -> Void {
/**
转场动画
from(从哪个控制器来)
to(需要被转场的控制器)
options 转场的动画效果
completionHandler 转场结束后的执行
*/
transition(from: vc1, to: vc2, options: .slideRight) {
print("to vc2")
}
}
@objc func backToOldVC() -> Void {
transition(from: vc2, to: vc1, options: .slideLeft) {
print("back to vc1")
}
}
}