-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathBook.InteractiveNode.swift
88 lines (76 loc) · 2.08 KB
/
Book.InteractiveNode.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import StorybookKit
import StorybookKitTextureSupport
import TextureSwiftSupport
extension Book {
private static func makeBody() -> ASDisplayNode {
AnyDisplayNode { node, _ in
LayoutSpec {
node._makeNode {
let textNode = ASTextNode()
textNode.attributedText = NSAttributedString(string: "InteractiveNode")
return textNode
}
.padding(8)
.background(
node._makeNode {
ShapeLayerNode.roundedCorner(radius: 16).setShapeFillColor(.systemYellow)
}
)
}
}
}
@MainActor
static func bookInteractiveNode() -> BookPage {
BookPage(title: "InteractiveNode") {
BookNodePreview { _ in
InteractiveNode(animation: .translucent) {
makeBody()
}
}
BookSection(title: "With Haptics") {
ForEach.inefficient(items: [.light, .medium, .heavy] as [UIImpactFeedbackGenerator.FeedbackStyle]) {
style in
BookNodePreview(title: "Impact style:\(style.localizedDescription)") { _ in
InteractiveNode(
animation: .translucent,
haptics: .impactOnTouchUpInside(style: style)
) {
makeBody()
}
}
}
if #available(iOS 13, *) {
ForEach.inefficient(items: [.soft, .rigid] as [UIImpactFeedbackGenerator.FeedbackStyle]) {
style in
BookNodePreview(title: "Impact style:\(style.localizedDescription)") { _ in
InteractiveNode(
animation: .translucent,
haptics: .impactOnTouchUpInside(style: style)
) {
makeBody()
}
}
}
}
}
}
}
}
extension UIImpactFeedbackGenerator.FeedbackStyle {
fileprivate var localizedDescription: String {
switch self {
case .light:
return "light"
case .medium:
return "medium"
case .heavy:
return "heavy"
case .soft:
return "soft"
case .rigid:
return "rigid"
@unknown default:
return "unknown"
}
}
}