// // LoadingSpinnerView.swift // Locations // // Created by Javier Cicchelli on 12/04/2023. // Copyright © 2023 Röck+Cöde. All rights reserved. // import UIKit class LoadingSpinnerView: UIView { // MARK: Outlets lazy var stack: UIStackView = { let stack = UIStackView(frame: .zero) stack.alignment = .center stack.axis = .vertical stack.distribution = .fill stack.spacing = 8 stack.translatesAutoresizingMaskIntoConstraints = false return stack }() lazy var spinner: UIActivityIndicatorView = { let spinner = UIActivityIndicatorView(style: .large) spinner.translatesAutoresizingMaskIntoConstraints = false spinner.startAnimating() return spinner }() lazy var label: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.font = .preferredFont(forTextStyle: .headline) label.text = "Loading..." label.textAlignment = .center label.numberOfLines = 0 label.lineBreakMode = .byWordWrapping return label }() // MARK: Initialisers init() { super.init(frame: .zero) setupView() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } // MARK: - Helpers private extension LoadingSpinnerView { // MARK: Functions func setupView() { backgroundColor = .clear translatesAutoresizingMaskIntoConstraints = false stack.addArrangedSubview(spinner) stack.addArrangedSubview(label) addSubview(stack) NSLayoutConstraint.activate([ topAnchor.constraint(equalTo: stack.topAnchor), leadingAnchor.constraint(equalTo: stack.leadingAnchor), trailingAnchor.constraint(equalTo: stack.trailingAnchor), bottomAnchor.constraint(equalTo: stack.bottomAnchor), ]) } }