Keywindow is returning nil and wouldn't setUpViews in viewDidLoad. I'm trying to implement this into the firebase app. also tried using if let and it tells it keyWindow is nil:
import UIKit
import Firebase
class MainTabBarController: UITabBarController, UITabBarControllerDelegate {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
setUpViews()
setUpMenuView()
if Auth.auth().currentUser == nil {
//runs when all the UI is loaded, if you dont dispatchque this the UI will not load and this will crash.
DispatchQueue.main.async {
let navigationController = UINavigationController(rootViewController: SignInViewController())
self.present(navigationController, animated: true, completion: nil)
}
} else {
}
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "slide", style: .done, target: self, action: #selector(handleOpen))
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
view.addGestureRecognizer(panGesture)
}
// MARK:- Menu view
let menu = MenuController()
fileprivate let menuWidth: CGFloat = 300
func setUpMenuView() {
menu.view.frame = CGRect(x: 0, y: 0, width: menuWidth, height: view.frame.height)
let keyWindow = UIApplication.shared.keyWindow
keyWindow?.addSubview(menu.view)
addChild(menu)
}
fileprivate func performAnimation(transform: CGAffineTransform) {
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
[unowned self] in
self.menu.view.transform = transform
self.navigationController?.view.transform = transform
})
}
@objc func handlePan(gesture: UIPanGestureRecognizer) {
let translation = gesture.translation(in: view)
print(translation)
if gesture.state == .changed {
var x = translation.x
// x = max(x, 300)
let transform = CGAffineTransform(translationX: x, y: 0)
menu.view.transform = transform
}
}
@objc func handleOpen() {
// performAnimation(transform: CGAffineTransform(translationX: menuWidth, y: 0))
}
@objc func handleHide() {
performAnimation(transform: .identity)
}
// MARK:- ViewSetUp
func setUpViews() {
let image = createImage(name: "home", width: 25, height: 25)
let messageImag = createImage(name: "messages", width: 25, height: 25)
let profileImg = createImage(name: "profile", width: 25, height: 25)
let notificationImg = createImage(name: "notifications", width: 25, height: 25)
let home = createTab(unselected_image: image , selected_image: image , rootViewController: PhotoSelectorController(collectionViewLayout: UICollectionViewFlowLayout()))
let messages = createTab(unselected_image: messageImag , selected_image: messageImag , rootViewController: PhotoSelectorController(collectionViewLayout: UICollectionViewFlowLayout()))
let profile = createTab(unselected_image: profileImg , selected_image: profileImg , rootViewController: PhotoSelectorController(collectionViewLayout: UICollectionViewFlowLayout()))
let notification = createTab(unselected_image: notificationImg , selected_image: notificationImg , rootViewController: PhotoSelectorController(collectionViewLayout: UICollectionViewFlowLayout()))
self.viewControllers = [home,profile,notification,messages]
//lines up the buttons
// guard let item = tabBar.items else {return}
// for controller in item {
// controller.imageInsets = UIEdgeInsets(top: 4, left: 0, bottom: 0, right: -4)
// }
}
fileprivate func createImage(name: String, width: CGFloat, height: CGFloat) -> UIImage {
if let image = UIImage(named: name)?.resizeImage(targetSize: CGSize(width: width, height: height)) {
return image
} else {
print("Error image creation")
return UIImage()
}
}
fileprivate func createTab(unselected_image: UIImage, selected_image: UIImage, rootViewController: UIViewController = UIViewController()) -> UINavigationController {
let navController = UINavigationController(rootViewController: rootViewController)
navController.tabBarItem.image = selected_image
navController.tabBarItem.selectedImage = selected_image
return navController
}
}