SWindow 是一款易于使用的 Swift 窗口管理器。无需花费数小时编写代码来呈现和关闭模态视图控制器,无需浪费时间调试模态呈现消失的原因。轻松、简单且安全地呈现您的控制器,告别各种问题!
基本示例 让您的控制器遵循 SModalPresentation
协议
class YourController: UIViewController, SModalPresentation {}
要呈现您的控制器,只需调用
let controller = YourController()
controller.sPresent()
要关闭或从等待队列中移除,调用
controller.sWithdraw()
如果您想用其他控制器替换当前呈现的控制器,调用
controller.sReplace(with: newController)
如果当前有其他控制器正在呈现,SWindow 会自动将您的控制器添加到队列中。此外,在 sWithdraw()
事件发生后,关闭当前控制器后,将呈现队列中优先级最高的第一个控制器。
高级配置 上面是一个非常简单的例子。但是,SWindow 提供了多种配置选项。
您可以做的第一件事是使用您自己的值扩展 SModal 类。下面您可以看到一个您可以修改的示例。
extension SModal {
static var shouldMakeKey: Bool {
return false
}
static var windowLevel: UIWindowLevel {
return UIWindowLevelAlert - 1
}
static var animationDuration: TimeInterval {
return 0.2
}
}
首先,在每个项目中,我都会扩展 SModal
以在 shouldMakeKey
下返回 true
,这样我们的窗口将成为 keyWindow 并接收系统事件。
您可以调整的第二件事是 SModalPresentation
。如果您的控制器在 canDismiss
下返回 true
,则可以被 SWindow
关闭。 由于这个参数,无论什么控制器进入队列,并且当前呈现的控制器在这个标志下返回正值,SWindow
都会关闭它并呈现队列中的下一个控制器。
extension YourController {
public var canDismiss: Bool {
return false
}
public var priority: SModalPriority {
return .Required
}
}
正如我之前写到的,您的控制器在出队以进行呈现时按优先级排序。您可以更改每个与 SModalPresentation
对应的控制器的优先级。
最后要扩展的是:sPresent()
sWithdraw()
sReplace(with: UIViewController)
。这些方法中的每一个都有额外的参数,默认设置如下:animated: Bool = false, completion: (() -> Void)? = nil
CocoaPods
将 pod "SWindow"
行添加到您的 Podfile
Carthage
将 github "shial4/swindow"
行添加到您的 Cartfile
手动
克隆仓库并将文件 SWindow.swift
拖到您的 Xcode 项目中。
Swift Package Manager
将 .package(url: "https://github.com/shial4/SWindow.git", from: "0.1.10")
行添加到您的 Package.swift
欢迎为本项目做贡献!:)
只需在 GitHub 上创建一个 issue。
本项目根据 MIT 许可证发布。