3

I want to display a progress indicator at the center of the screen, NOT the view. It should be the center of the view because the view is scrollable. Most answers only tells how to center it in the view. I have this code:

            let screenBound = UIScreen.main.bounds
            let progressIndc = UIActivityIndicatorView()
            progressIndc.frame = CGRect(x: screenBound.width / 2 - 10,
                                        y: screenBound.height / 2 - 10,
                                        width: 20, height: 20)
            progressIndc.hidesWhenStopped = true
            progressIndc.color = UIColor.gray
            progressIndc.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
            // self.view is scroll view
            self.view.addSubview(progressIndc)
            progressIndc.startAnimating()

But it shown near the top in iPhone 7. What should be the right way? I can also do a blocking pop-up dialog with a progress indicator.

Anbu.Karthik
  • 82,064
  • 23
  • 174
  • 143
teddy
  • 2,158
  • 4
  • 26
  • 34

3 Answers3

4

you can use center property of UIView

progressIndc.center  =  self.view.center

for e.g

let screenBound = UIScreen.main.bounds
    let progressIndc = UIActivityIndicatorView()
    progressIndc.frame = CGRect(x: screenBound.width / 2 - 10,
                                y: screenBound.height / 2 - 10,
                                width: 20, height: 20)
    progressIndc.hidesWhenStopped = true
    progressIndc.color = UIColor.gray
    progressIndc.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
    // self.view is scroll view
    progressIndc.center  =  self.view.center
    self.view.addSubview(progressIndc)
    progressIndc.startAnimating()

output

enter image description here

Anbu.Karthik
  • 82,064
  • 23
  • 174
  • 143
4

if you want to keep the indicator view at the center of screen while scrolling, you can add a overlay view to the current topmost UIWindow, then add your indicator view to the overlay view:

guard let topWindow = UIApplication.shared.windows.last else {return}
let overlayView = UIView(frame: topWindow.bounds)
overlayView.backgroundColor = UIColor.clear
topWindow.addSubview(overlayView)
let hudView = UIActivityIndicatorView()
hudView.bounds = CGRect(x: 0, y: 0, width: 20, height: 20)
overlayView.addSubview(hudView)
hudView.center = overlayView.center

you should do this after the topmost UIViewController's view was attached on the top UIWindow, for example, in viewDidAppearmethod.

1

you can try this one to add you indicator on top of the screen. but it's not pretty solution -

AppDelegate.sharedInstance.window?.addSubview(progressIndc);