Passcode lock

This commit is contained in:
Yishi Lin 2018-04-10 00:14:35 +08:00
parent fe80ed3dc8
commit 433562584e
6 changed files with 125 additions and 78 deletions

View file

@ -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
}
}