summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2022-03-28 19:52:39 +0200
committerAndrej Mihajlov <and@mullvad.net>2022-03-28 19:52:39 +0200
commit9fb89746cfb9e007433e007eebb02b059d534416 (patch)
tree22728dd529170ba40652e1d00355c8d0cac10659
parent43d6c3f520ad91178cac53cbbb827a0ab67eca35 (diff)
parentec6e058f48e004a380d15cd7f04e9e629b9f5f0d (diff)
downloadmullvadvpn-9fb89746cfb9e007433e007eebb02b059d534416.tar.xz
mullvadvpn-9fb89746cfb9e007433e007eebb02b059d534416.zip
Merge branch 'use-spinner-image'
-rw-r--r--ios/MullvadVPN/SpinnerActivityIndicatorView.swift125
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
- }
-
}