Passcode lock
This commit is contained in:
parent
fe80ed3dc8
commit
433562584e
6 changed files with 125 additions and 78 deletions
|
|
@ -2,8 +2,10 @@
|
|||
// PasscodeLockPresenter.swift
|
||||
// PasscodeLock
|
||||
//
|
||||
// Created by Yanko Dimitrov on 8/29/15.
|
||||
// Copyright © 2015 Yanko Dimitrov. All rights reserved.
|
||||
// Created by Yishi Lin on 10/04/2018.
|
||||
// Copyright © 2018 Yishi Lin. All rights reserved.
|
||||
//
|
||||
// Inspired by SwiftPasscodeLock created by Yanko Dimitrov.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
|
@ -11,49 +13,42 @@ import UIKit
|
|||
open class PasscodeLockPresenter {
|
||||
|
||||
fileprivate var mainWindow: UIWindow?
|
||||
|
||||
fileprivate lazy var passcodeLockWindow = UIWindow(frame: UIScreen.main.bounds)
|
||||
|
||||
open var isPasscodePresented = false
|
||||
open let passcodeLockVC: PasscodeLockViewController
|
||||
|
||||
public init(mainWindow window: UIWindow?, viewController: PasscodeLockViewController) {
|
||||
mainWindow = window
|
||||
passcodeLockVC = viewController
|
||||
fileprivate var passcodeLockWindow: UIWindow?
|
||||
|
||||
public init(mainWindow window: UIWindow?) {
|
||||
self.mainWindow = window
|
||||
}
|
||||
|
||||
public convenience init(mainWindow window: UIWindow?) {
|
||||
let passcodeLockVC = PasscodeLockViewController()
|
||||
self.init(mainWindow: window, viewController: passcodeLockVC)
|
||||
}
|
||||
|
||||
open func present(windowLevel: CGFloat?) {
|
||||
guard PasscodeLock.shared.hasPasscode else { return }
|
||||
guard !isPasscodePresented else { return }
|
||||
|
||||
isPasscodePresented = true
|
||||
|
||||
// dismiss the original window
|
||||
dismiss()
|
||||
|
||||
// new window
|
||||
mainWindow?.endEditing(true)
|
||||
passcodeLockWindow = UIWindow(frame: self.mainWindow!.frame)
|
||||
moveWindowsToFront(windowLevel: windowLevel)
|
||||
passcodeLockWindow.isHidden = false
|
||||
|
||||
passcodeLockWindow?.isHidden = false
|
||||
|
||||
// new vc
|
||||
let passcodeLockVC = PasscodeLockViewController()
|
||||
let userDismissCompletionCallback = passcodeLockVC.dismissCompletionCallback
|
||||
passcodeLockVC.dismissCompletionCallback = { [weak self] in
|
||||
userDismissCompletionCallback?()
|
||||
self?.dismiss()
|
||||
}
|
||||
passcodeLockWindow.rootViewController = passcodeLockVC
|
||||
passcodeLockWindow?.rootViewController = passcodeLockVC
|
||||
}
|
||||
|
||||
open func dismiss() {
|
||||
isPasscodePresented = false
|
||||
passcodeLockWindow.isHidden = true
|
||||
passcodeLockWindow.rootViewController = nil
|
||||
passcodeLockWindow?.isHidden = true
|
||||
passcodeLockWindow?.rootViewController = nil
|
||||
}
|
||||
|
||||
fileprivate func moveWindowsToFront(windowLevel: CGFloat?) {
|
||||
let windowLevel = windowLevel ?? UIWindowLevelNormal
|
||||
let maxWinLevel = max(windowLevel, UIWindowLevelNormal)
|
||||
passcodeLockWindow.windowLevel = maxWinLevel + 1
|
||||
passcodeLockWindow?.windowLevel = maxWinLevel + 1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue