以编程方式自定义可恢复的UIActivityIndi catorView类

问题描述 投票:0回答:1

我是通过程序制作视图的新手。我正在尝试使UIActivityIndi​​catorView类使其可重用。这是我上的课:

class ActivityIndicator: UIActivityIndicatorView {

    let indicator = UIActivityIndicatorView()
    let indicatorContainer = UIView()

    func setupIndicatorView() {
        indicatorContainer.isHidden = false
        indicator.isHidden = false
        indicator.style = .large
        indicator.color = .white
        indicator.startAnimating()
        indicator.hidesWhenStopped = true
        indicator.translatesAutoresizingMaskIntoConstraints = false

        indicatorContainer.backgroundColor = .darkGray
        indicatorContainer.alpha = 0.7
        indicatorContainer.layer.cornerRadius = 8.0
        indicatorContainer.translatesAutoresizingMaskIntoConstraints = false

        addSubview(indicatorContainer)
        indicatorContainer.addSubview(indicator)

        func setupIndicatorContainerConstraints() {
            NSLayoutConstraint.activate([
                indicatorContainer.centerXAnchor.constraint(equalTo: centerXAnchor),
                indicatorContainer.centerYAnchor.constraint(equalTo: centerYAnchor),
                indicatorContainer.widthAnchor.constraint(equalToConstant: frame.width / 5),
                indicatorContainer.heightAnchor.constraint(equalToConstant: frame.width / 5)
            ])
        }

        func setupIndicatorViewConstraints() {
            NSLayoutConstraint.activate([
                indicator.centerXAnchor.constraint(equalTo: indicatorContainer.centerXAnchor),
                indicator.centerYAnchor.constraint(equalTo: indicatorContainer.centerYAnchor)
            ])
        }

        setupIndicatorContainerConstraints()
        setupIndicatorViewConstraints()
    }

    func hideIndicatorView() {
        indicatorContainer.isHidden = true
        indicator.stopAnimating()
        indicator.isHidden = true
        indicatorContainer.removeFromSuperview()
        indicator.removeFromSuperview()
    }
}

[当我尝试从此类创建实例时,该实例在任何其他控制器中均不起作用。像这样:

class SignInViewController: UIViewController {

    let indicator = ActivityIndicator()

    lazy var mainView: SignInView = {
        let view = SignInView(delegate: self, frame: self.view.frame)
        view.backgroundColor = .white
        return view
    }()

    override func loadView() {
        super.loadView()
        view = mainView
    }

    func loginButtonTapped() {
        indicator.setupIndicatorView()
    }
}

我进行了很多搜索,以了解如何使其工作,但我还没有找到方法。

ios swift uiview uiactivityindicatorview
1个回答
0
投票

您未将其添加到vc的视图中

indicator.setupIndicatorView()

因此考虑

setupIndicatorView(_ view:UIView) {

 .....
 .....

  // add it here

    addSubview(indicatorContainer)
    indicatorContainer.addSubview(indicator)
    view.addSubview(self)
}
© www.soinside.com 2019 - 2024. All rights reserved.