How to display an activity indicator with text on iOS 8 with Swift?

前端 未结 14 2202
没有蜡笔的小新
没有蜡笔的小新 2020-11-27 08:58

I wanna show, programmatically, an activity indicator with text, like the one in the Photos app (after editing and saving a picture). How can I do this?

14条回答
  •  心在旅途
    2020-11-27 09:52

    For Swift 3

    Usage

    class LoginTVC: UITableViewController {
        var loadingView : LoadingView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // CASE 1: To Show loadingView on load
    
            loadingView = LoadingView(uiView: view, message: "Sending you verification code")
        }
    
        // CASE 2: To show loadingView on click of a button
    
        @IBAction func showLoadingView(_ sender: UIButton) {
            if let loaderView = loadingView{ // If loadingView already exists
                if loaderView.isHidden() {
                    loaderView.show()  // To show activity indicator
                }
            }
            else{
                loadingView = LoadingView(uiView: view, message: "Sending you verification code")
             }
        }
    }
    
        // CASE 3: To hide LoadingView on click of a button
    
        @IBAction func hideLoadingView(_ sender: UIButton) {
            if let loaderView = loadingView{ // If loadingView already exists 
                self.loadingView.hide()   
            }
        }
    }
    

    LoadingView Class

    class LoadingView {
    
        let uiView          :   UIView
        let message         :   String
        let messageLabel    =   UILabel()
    
        let loadingSV       =   UIStackView()
        let loadingView     =   UIView()
        let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
    
        init(uiView: UIView, message: String) {
            self.uiView     =   uiView
            self.message    =   message
            self.setup()
        }
    
        func setup(){
            let viewWidth   = uiView.bounds.width
            let viewHeight  = uiView.bounds.height
    
            // Configuring the message label
            messageLabel.text             = message
            messageLabel.textColor        = UIColor.darkGray
            messageLabel.textAlignment    = .center
            messageLabel.numberOfLines    = 3
            messageLabel.lineBreakMode    = .byWordWrapping
    
            // Creating stackView to center and align Label and Activity Indicator
            loadingSV.axis          = .vertical
            loadingSV.distribution  = .equalSpacing
            loadingSV.alignment     = .center
            loadingSV.addArrangedSubview(activityIndicator)
            loadingSV.addArrangedSubview(messageLabel)
    
            // Creating loadingView, this acts as a background for label and activityIndicator
            loadingView.frame           = uiView.frame
            loadingView.center          = uiView.center
            loadingView.backgroundColor = UIColor.darkGray.withAlphaComponent(0.3)
            loadingView.clipsToBounds   = true
    
            // Disabling auto constraints
            loadingSV.translatesAutoresizingMaskIntoConstraints = false
    
            // Adding subviews
            loadingView.addSubview(loadingSV)
            uiView.addSubview(loadingView)
            activityIndicator.startAnimating()
    
            // Views dictionary
            let views = [
                "loadingSV": loadingSV
            ]
    
            // Constraints for loadingSV
            uiView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[loadingSV(300)]-|", options: [], metrics: nil, views: views))
            uiView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-\(viewHeight / 3)-[loadingSV(50)]-|", options: [], metrics: nil, views: views))
        }
    
        // Call this method to hide loadingView
        func show() {
            loadingView.isHidden = false
        }
    
        // Call this method to show loadingView
        func hide(){
            loadingView.isHidden = true
        }
    
        // Call this method to check if loading view already exists
        func isHidden() -> Bool{
            if loadingView.isHidden == false{
                return false
            }
            else{
                return true
            }
        }
    }
    

提交回复
热议问题