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文件。