What is example for loading overlay in Swift IOS application when do a long tasks. Example for loading data from remote server. I googled but not found any answer.
Updated:
Thanks for @Sebastian Dressler this is simple way. I updated my code and it run cool
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.frame = CGRectMake(0, 0, 80, 80)
overlayView.center = view.center
overlayView.backgroundColor = UIColor(hex: 0x444444, alpha: 0.7)
overlayView.clipsToBounds = true
overlayView.layer.cornerRadius = 10
activityIndicator.frame = CGRectMake(0, 0, 40, 40)
activityIndicator.activityIndicatorViewStyle = .WhiteLarge
activityIndicator.center = CGPointMake(overlayView.bounds.width / 2, overlayView.bounds.height / 2)
overlayView.addSubview(activityIndicator)
view.addSubview(overlayView)
activityIndicator.startAnimating()
}
public func hideOverlayView() {
activityIndicator.stopAnimating()
overlayView.removeFromSuperview()
}
}
let using:
LoadingOverlay.shared.showOverlay(self.view)
//To to long tasks
LoadingOverlay.shared.hideOverlayView()
Just create yourself an overlay view, which you add to your parent view and remove it once your task is done, e.g. to add it:
For removal:
Updated @sonrobby answer, added a background view and orientation handling via resizing mask... this can be used for simple stuffs
if you add it to keywindow, it can then go over your nav and tab bars also... something like this
I've created a protocol for presenting your own view controller as an overlay. The usage is very simple:
Result:
Source code: https://github.com/agordeev/OverlayViewController
Related article: https://andreygordeev.com/2017/04/18/overlay-view-controller-protocols-swift/
Blur background + Activity Indicator, Swift 3 example
The above answers add a loading view but it doesn't block click events on the screen also it does not provides overlay for rest of screen.You can achieve it as follows:
Swift 3.0
Swift 4.0
and you can hide it as follows:
It will be shown as follows:
For anyone late like me, I made some modifications to @Sonrobby code. As i understand, @Sonrobby adds the activity to the overlay on every
showOverlay
call. And some of the configuration can be passed to the init function, letting only the placement on theshowOverlay
method.I also change the overlay's background to black, since my app it is mostly white.
here is the code :