38 lines
1.3 KiB
Swift
38 lines
1.3 KiB
Swift
/*
|
|
* This file is part of the SDWebImage package.
|
|
* (c) DreamPiggy <lizhuoli1126@126.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
import SwiftUI
|
|
|
|
/// A dot circle view that depicts the active status of a task.
|
|
struct ActivityBar: View {
|
|
private var dotRadius: CGFloat = 5
|
|
@State private var isAnimating: Bool = false
|
|
|
|
var body: some View {
|
|
GeometryReader { (geometry: GeometryProxy) in
|
|
ForEach(0..<5) { index in
|
|
Group {
|
|
Circle()
|
|
.frame(width: self.dotRadius, height: self.dotRadius)
|
|
.scaleEffect(!self.isAnimating ? 1 - CGFloat(index) / 5 : 0.2 + CGFloat(index) / 5)
|
|
.offset(y: geometry.size.width / 10 - geometry.size.height / 2)
|
|
}
|
|
.frame(width: geometry.size.width, height: geometry.size.height)
|
|
.rotationEffect(!self.isAnimating ? .degrees(0) : .degrees(360))
|
|
.animation(Animation
|
|
.timingCurve(0.5, 0.15 + Double(index) / 5, 0.25, 1, duration: 1.5)
|
|
.repeatForever(autoreverses: false))
|
|
}
|
|
}
|
|
.aspectRatio(1, contentMode: .fit)
|
|
.onAppear {
|
|
self.isAnimating = true
|
|
}
|
|
}
|
|
}
|