直接 1.6

Direct 1.6

Igor Matyushkin维护。




Direct 1.6

  • Igor Matyushkin

Direct

Direct

简化iOS应用程序中屏幕间的转换。

如何开始

  • Source文件夹的内容复制到您的项目中。

  • 使用Direct Cocoapod

要求

  • iOS 9及更高版本
  • Xcode 9及更高版本
  • Swift 4

使用方法

准备

Scene类创建扩展

extension Scene {
    
    static var main: Scene {
        let navigationController = UINavigationController()
        navigationController.viewControllers = [
            MainViewController(nibName: "MainViewController", bundle: nil)
        ]
        return Scene(rootController: navigationController)
    }
    
}

修改AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    Navigator.shared
        .createWindow()
        .setScene(.main)
    
    return true
}

此外,从AppDelegate类中删除对窗口的引用(var window: UIWindow?)。

窗口

使用 Navigator 类,您可以用一行代码创建窗口

Navigator.shared.createWindow()

如果您有自定义窗口类,也可以使用它

Navigator.shared.createWindow(ofType: MyWindow.self)

建议在 AppDelegate 中使用 createWindow() 方法(参见 准备工作 部分的示例)。

通常,Xcode 会自动创建包含 UIWindow 引用的 AppDelegate 类。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
}

使用 Navigator,您无需保留此引用,因此可以从 AppDelegate 类中删除它。改用 Navigator.window

场景

场景描述了导航栈,包括根控制器。以下是一个示例

let navigationController = UINavigationController()

navigationController.viewControllers = [
    MyViewController(nibName: "MyViewController", bundle: nil)
]

let scene = Scene(rootController: navigationController)

强烈推荐扩展 Scene 类,并提供静态变量来描述新的场景,如 准备工作 部分所示。

场景之间的切换非常简单

Navigator.shared.setScene(newScene)

过渡动画

过渡动画是针对导航堆栈执行的操作,例如:推入、呈现、消失视图控制器等。以下是如何使用 Direct 库管理导航堆栈的示例。

推入视图控制器

let someViewController = SomeViewController(nibName: "SomeViewController", bundle: nil)
Navigator.shared.performTransition(.push(viewController: someViewController, animated: true))

弹出

Navigator.shared.performTransition(.pop(animated: true))

弹出到根视图控制器

Navigator.shared.performTransition(.popToRootViewController(animated: true))

呈现

Navigator.shared.performTransition(.present(viewController: someViewController, animated: true, completion: {
}))

消失

Navigator.shared.performTransition(.dismiss(animated: true, completion: {
}))

访问当前导航控制器

if let currentNavigationController = Navigator.shared.scene?.rootNavigationController {
    // Do something with current navigation controller
}

语法

Navigator 支持调用链,因此您可以编写长表达式

Navigator.shared
    .createWindow()
    .setScene(.main)
    .performTransition(.push(viewController: someViewController, animated: false))
    .performTransition(.present(viewController: popupViewController, animated: true, completion: {
    }))

许可证

Direct采用MIT许可证。有关更多信息,请参阅LICENSE文件。