-
-
Save igordeoliveirasa/78a310f0348fcad9b270 to your computer and use it in GitHub Desktop.
// | |
// LoadingOverlay.swift | |
// app | |
// | |
// Created by Igor de Oliveira Sa on 25/03/15. | |
// Copyright (c) 2015 Igor de Oliveira Sa. All rights reserved. | |
// | |
// Usage: | |
// | |
// # Show Overlay | |
// LoadingOverlay.shared.showOverlay(self.navigationController?.view) | |
// | |
// # Hide Overlay | |
// LoadingOverlay.shared.hideOverlayView() | |
import UIKit | |
import Foundation | |
public class LoadingOverlay{ | |
var overlayView = UIView() | |
var activityIndicator = UIActivityIndicatorView() | |
class var shared: LoadingOverlay { | |
struct Static { | |
static let instance: LoadingOverlay = LoadingOverlay() | |
} | |
return Static.instance | |
} | |
public func showOverlay(view: UIView!) { | |
overlayView = UIView(frame: UIScreen.mainScreen().bounds) | |
overlayView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5) | |
activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) | |
activityIndicator.center = overlayView.center | |
overlayView.addSubview(activityIndicator) | |
activityIndicator.startAnimating() | |
view.addSubview(overlayView) | |
} | |
public func hideOverlayView() { | |
activityIndicator.stopAnimating() | |
overlayView.removeFromSuperview() | |
} | |
} |
I'm getting an error on line#39 as well.
Error: "Unexpectedly found nil while unwrapping an Optional value."
Changing:
"LoadingOverlay.shared.showOverlay(self.navigationController?.view)"
to
"LoadingOverlay.shared.showOverlay(self.view)"
Seems worked for me.
Nice solution. I would suggest making your vars private so they're hidden from invoking objects. Only allow access to your functions. I also added a class level boolean called visible that will track whether the overlay is visible or not. This way a call into stopAnimating and removeFromSuperview only occur if the overlay is visible.
@prwiley and @ctouchstone, you probably do not have a navigation controller initialized. You can get one easily by adding it to the storyboard or you can create a main navigation controller, see http://stackoverflow.com/questions/26753925/set-initial-viewcontroller-in-appdelegate-swift
Exactly what I needed. Thanks for saving me some time 👍
Works great :-) Thanks
Thanks a lot 👍
What about user interactions?
This won't work for view gestures
if there is UIKit, then Foundation is unnecessary to import
This is generating an error for me "unexpectedly found nil . . ." at line 39