passforios/passKit/Controllers/PasscodeLockPresenter.swift

55 lines
1.6 KiB
Swift
Raw Normal View History

//
// PasscodeLockPresenter.swift
// PasscodeLock
//
2018-04-10 00:14:35 +08:00
// Created by Yishi Lin on 10/04/2018.
// Copyright © 2018 Yishi Lin. All rights reserved.
//
// Inspired by SwiftPasscodeLock created by Yanko Dimitrov.
//
import UIKit
open class PasscodeLockPresenter {
2018-12-09 16:59:07 -08:00
fileprivate var mainWindow: UIWindow?
2018-04-10 00:14:35 +08:00
fileprivate var passcodeLockWindow: UIWindow?
2018-04-10 00:14:35 +08:00
public init(mainWindow window: UIWindow?) {
self.mainWindow = window
}
2018-04-10 00:14:35 +08:00
open func present(windowLevel: CGFloat?) {
guard PasscodeLock.shared.hasPasscode else { return }
2018-12-09 16:59:07 -08:00
2018-04-10 00:14:35 +08:00
// dismiss the original window
dismiss()
2018-12-09 16:59:07 -08:00
2018-04-10 00:14:35 +08:00
// new window
mainWindow?.endEditing(true)
2018-04-10 00:14:35 +08:00
passcodeLockWindow = UIWindow(frame: self.mainWindow!.frame)
moveWindowsToFront(windowLevel: windowLevel)
2018-04-10 00:14:35 +08:00
passcodeLockWindow?.isHidden = false
2018-12-09 16:59:07 -08:00
2018-04-10 00:14:35 +08:00
// new vc
let passcodeLockVC = PasscodeLockViewController()
let userDismissCompletionCallback = passcodeLockVC.dismissCompletionCallback
passcodeLockVC.dismissCompletionCallback = { [weak self] in
userDismissCompletionCallback?()
self?.dismiss()
}
2018-04-10 00:14:35 +08:00
passcodeLockWindow?.rootViewController = passcodeLockVC
}
open func dismiss() {
2018-04-10 00:14:35 +08:00
passcodeLockWindow?.isHidden = true
passcodeLockWindow?.rootViewController = nil
}
fileprivate func moveWindowsToFront(windowLevel: CGFloat?) {
let windowLevel = windowLevel ?? UIWindowLevelNormal
let maxWinLevel = max(windowLevel, UIWindowLevelNormal)
2018-04-10 00:14:35 +08:00
passcodeLockWindow?.windowLevel = maxWinLevel + 1
}
}