diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2022-03-28 19:52:39 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2022-03-28 19:52:39 +0200 |
| commit | 9fb89746cfb9e007433e007eebb02b059d534416 (patch) | |
| tree | 22728dd529170ba40652e1d00355c8d0cac10659 | |
| parent | 43d6c3f520ad91178cac53cbbb827a0ab67eca35 (diff) | |
| parent | ec6e058f48e004a380d15cd7f04e9e629b9f5f0d (diff) | |
| download | mullvadvpn-9fb89746cfb9e007433e007eebb02b059d534416.tar.xz mullvadvpn-9fb89746cfb9e007433e007eebb02b059d534416.zip | |
Merge branch 'use-spinner-image'
| -rw-r--r-- | ios/MullvadVPN/SpinnerActivityIndicatorView.swift | 125 |
1 files changed, 19 insertions, 106 deletions
diff --git a/ios/MullvadVPN/SpinnerActivityIndicatorView.swift b/ios/MullvadVPN/SpinnerActivityIndicatorView.swift index c95a1bb434..243389a3ff 100644 --- a/ios/MullvadVPN/SpinnerActivityIndicatorView.swift +++ b/ios/MullvadVPN/SpinnerActivityIndicatorView.swift @@ -12,7 +12,6 @@ private let kRotationAnimationKey = "rotation" private let kAnimationDuration = 0.6 class SpinnerActivityIndicatorView: UIView { - enum Style { case small, medium, large @@ -26,73 +25,39 @@ class SpinnerActivityIndicatorView: UIView { return .init(width: 60, height: 60) } } - - var thickness: CGFloat { - switch self { - case .small, .medium: - return 2 - case .large: - return 8 - } - } } - /// Thickness of the front and back circles - var thickness: CGFloat = 6 { - didSet { - setLayersThickness() - } - } - - /// The back circle color - var backCircleColor = UIColor.white.withAlphaComponent(0.2) { - didSet { - setBackCircleLayerColor() - } - } - - /// The front circle color - var frontCircleColor: UIColor? { - didSet { - setFrontCircleLayerColor() - } - } + private let imageView = UIImageView(image: UIImage(named: "IconSpinner")) private(set) var isAnimating = false private(set) var style = Style.large - fileprivate let frontCircle = CAShapeLayer() - fileprivate let backCircle = CAShapeLayer() - fileprivate var startTime = CFTimeInterval(0) - fileprivate var stopTime = CFTimeInterval(0) + private var startTime = CFTimeInterval(0) + private var stopTime = CFTimeInterval(0) override var intrinsicContentSize: CGSize { return style.intrinsicSize } - convenience init(style: Style) { - self.init(frame: .init(origin: .zero, size: style.intrinsicSize)) + init(style: Style) { self.style = style - self.thickness = style.thickness - commonInit() - } - override init(frame: CGRect) { - super.init(frame: frame) - commonInit() - } + super.init(frame: CGRect(origin: .zero, size: style.intrinsicSize)) - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } + addSubview(imageView) + isHidden = true + backgroundColor = UIColor.clear - deinit { - unregisterFromAppStateNotifications() + NotificationCenter.default.addObserver( + self, + selector: #selector(restartAnimationIfNeeded), + name: UIApplication.willEnterForegroundNotification, + object: nil + ) } - override func layoutSublayers(of layer: CALayer) { - super.layoutSublayers(of: layer) - setupBezierPaths() + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") } override func didMoveToWindow() { @@ -103,10 +68,10 @@ class SpinnerActivityIndicatorView: UIView { } } - override func tintColorDidChange() { - super.tintColorDidChange() + override func layoutSubviews() { + super.layoutSubviews() - setFrontCircleLayerColor() + imageView.frame = CGRect(origin: .zero, size: style.intrinsicSize) } func startAnimating() { @@ -125,39 +90,6 @@ class SpinnerActivityIndicatorView: UIView { removeAnimation() } - // MARK: - Private - - private func commonInit() { - registerForAppStateNotifications() - - isHidden = true - backgroundColor = UIColor.clear - - backCircle.fillColor = UIColor.clear.cgColor - frontCircle.fillColor = UIColor.clear.cgColor - frontCircle.lineCap = .round - - setBackCircleLayerColor() - setFrontCircleLayerColor() - setLayersThickness() - - layer.addSublayer(backCircle) - layer.addSublayer(frontCircle) - } - - private func setLayersThickness() { - backCircle.lineWidth = thickness - frontCircle.lineWidth = thickness - } - - private func setBackCircleLayerColor() { - backCircle.strokeColor = backCircleColor.cgColor - } - - private func setFrontCircleLayerColor() { - frontCircle.strokeColor = frontCircleColor?.cgColor ?? tintColor.cgColor - } - private func addAnimation() { let timeOffset = stopTime - startTime @@ -184,14 +116,6 @@ class SpinnerActivityIndicatorView: UIView { } } - private func registerForAppStateNotifications() { - NotificationCenter.default.addObserver(self, selector: #selector(restartAnimationIfNeeded), name: UIApplication.willEnterForegroundNotification, object: nil) - } - - private func unregisterFromAppStateNotifications() { - NotificationCenter.default.removeObserver(self) - } - private func animation() -> CABasicAnimation { let animation = CABasicAnimation(keyPath: "transform.rotation") animation.toValue = NSNumber(value: Double.pi * 2) @@ -201,15 +125,4 @@ class SpinnerActivityIndicatorView: UIView { return animation } - - private func setupBezierPaths() { - let center = CGPoint(x: bounds.size.width * 0.5, y: bounds.size.height * 0.5) - let radius = bounds.size.width * 0.5 - thickness - let closedRingPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: 0, endAngle: CGFloat.pi * 2, clockwise: true) - let openRingPath = UIBezierPath(arcCenter: center, radius: radius, startAngle: 0, endAngle: CGFloat.pi * 1.5, clockwise: true) - - backCircle.path = closedRingPath.cgPath - frontCircle.path = openRingPath.cgPath - } - } |
