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

推荐阅读更多精彩内容

  • 前言的前言 唐巧前辈在微信公众号「iOSDevTips」以及其博客上推送了我的文章后,我的 Github 各项指标...
    VincentHK阅读 3,608评论 5 38
  • 君问归期未有期,巴山夜雨涨秋池。何当共剪西窗烛,却话巴山夜雨时。 恐怕只有身在异乡的人才能懂得诗人心中的那...
    我本为旭阅读 383评论 0 4
  • 所谓“食育”并不是教孩子如何吃东西,而是以培养孩子健康生活基础的“饮食行为能力”。具体如下: 1.我们希望孩子在生...
    healthylife828阅读 53评论 0 0
  • 简介 MongoDB 是一个基于分布式文件存储的数据库。 由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高...
    renyangfar阅读 36评论 0 0
  • 很多美眉脸上长了令人讨厌的斑点,为此苦恼不堪。其实雀斑的形成主要是因为内分泌失调,导致体内代谢废物沉积于面部。如果...
    捷足优选阅读 47评论 0 0