SWindow

Language License TravisCI CocoaPods Carthage

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 许可证发布。