metatext/Views/WebfingerIndicatorView.swift
2020-11-08 22:22:20 -08:00

61 lines
1.9 KiB
Swift

// Copyright © 2020 Metabolist. All rights reserved.
import UIKit
final class WebfingerIndicatorView: UIVisualEffectView {
private let activityIndicatorView = UIActivityIndicatorView()
init() {
super.init(effect: nil)
clipsToBounds = true
layer.cornerRadius = .defaultCornerRadius
contentView.addSubview(activityIndicatorView)
activityIndicatorView.translatesAutoresizingMaskIntoConstraints = false
activityIndicatorView.style = .large
NSLayoutConstraint.activate([
trailingAnchor.constraint(
equalTo: activityIndicatorView.trailingAnchor, constant: .defaultSpacing),
bottomAnchor.constraint(
equalTo: activityIndicatorView.bottomAnchor, constant: .defaultSpacing),
activityIndicatorView.topAnchor.constraint(
equalTo: topAnchor, constant: .defaultSpacing),
activityIndicatorView.leadingAnchor.constraint(
equalTo: leadingAnchor, constant: .defaultSpacing),
activityIndicatorView.centerXAnchor.constraint(
equalTo: contentView.safeAreaLayoutGuide.centerXAnchor),
activityIndicatorView.centerYAnchor.constraint(
equalTo: contentView.safeAreaLayoutGuide.centerYAnchor)
])
isHidden = true
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension WebfingerIndicatorView {
func startAnimating() {
isHidden = false
activityIndicatorView.startAnimating()
UIView.animate(withDuration: .defaultAnimationDuration) {
self.effect = UIBlurEffect(style: .systemChromeMaterial)
}
}
func stopAnimating() {
activityIndicatorView.stopAnimating()
UIView.animate(withDuration: .defaultAnimationDuration) {
self.effect = nil
} completion: { _ in
self.isHidden = true
}
}
}