Пользовательский обновляемый класс UIActivityIndicatorView программно - PullRequest
0 голосов
/ 22 февраля 2020

Я новичок в создании представлений программно. Я пытаюсь сделать класс UIActivityIndicatorView, чтобы сделать его многоразовым для меня. Это класс, который я создал:

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()
    }
}

Я много искал, чтобы понять, как заставить это работать, но я не нашел способа.

1 Ответ

0 голосов
/ 22 февраля 2020

Вы не добавляете его в представление v c

indicator.setupIndicatorView()

, поэтому рассмотрите

setupIndicatorView(_ view:UIView) {

 .....
 .....

  // add it here

    addSubview(indicatorContainer)
    indicatorContainer.addSubview(indicator)
    view.addSubview(self)
}
...