-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathFidgetSpinnerView.swift
55 lines (48 loc) · 1.52 KB
/
FidgetSpinnerView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//
// FidgetSpinnerView.swift
// FidgetSpinner
//
// Created by Ganesh on 01/09/23.
//
import SwiftUI
struct FidgetSpinnerView: View {
@State private var angle: Double = 0
@State private var acceleration: Double = 0
private let timer = Timer.publish(every: 0.01, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
Color.black.ignoresSafeArea()
ZStack {
LinearGradient(
gradient: Gradient(colors: [.pink, .purple]),
startPoint: .topLeading,
endPoint: .bottomTrailing
)
.mask(
Image(systemName: "snowflake")
.resizable()
.scaledToFit()
.frame(width: 300, height: 300)
.rotationEffect(.degrees(angle))
)
.frame(width: 300, height: 300)
.gesture(
DragGesture()
.onChanged { value in
acceleration += value.translation.height / 10
}
)
.foregroundColor(.pink)
.onReceive(timer) { _ in
acceleration += (acceleration * 0.01)
angle += acceleration
}
}
}
}
}
struct FidgetSpinnerView_Previews: PreviewProvider {
static var previews: some View {
FidgetSpinnerView()
}
}