MacOS学习(四) 转场动画

在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")
       }
   }
}

你可能感兴趣的:(MacOS学习(四) 转场动画)