Skip to content

Commit 80d0d0f

Browse files
committed
Update View+Fade.swift
1 parent 993a1dd commit 80d0d0f

File tree

1 file changed

+72
-23
lines changed

1 file changed

+72
-23
lines changed

Sources/SwiftUIExtension/Extensions/View+Fade.swift

Lines changed: 72 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,87 @@ import SwiftUI
22

33
extension View {
44

5-
public func fade(top: CGFloat? = nil, bottom: CGFloat? = nil) -> some View {
6-
modifier(VerticalFade(top: top, bottom: bottom))
5+
public func fade(
6+
top: CGFloat? = nil,
7+
bottom: CGFloat? = nil,
8+
leading: CGFloat? = nil,
9+
trailing: CGFloat? = nil
10+
) -> some View {
11+
modifier(
12+
Fade(
13+
top: top,
14+
bottom: bottom,
15+
leading: leading,
16+
trailing: trailing
17+
)
18+
)
19+
}
20+
21+
public func fade(
22+
horizontal: CGFloat? = nil,
23+
vertical: CGFloat? = nil
24+
) -> some View {
25+
modifier(
26+
Fade(
27+
top: vertical,
28+
bottom: vertical,
29+
leading: horizontal,
30+
trailing: horizontal
31+
)
32+
)
733
}
834
}
935

10-
struct VerticalFade: ViewModifier {
36+
struct Fade: ViewModifier {
1137

1238
let top: CGFloat?
1339
let bottom: CGFloat?
40+
let leading: CGFloat?
41+
let trailing: CGFloat?
1442

1543
func body(content: Content) -> some View {
1644
content
17-
.mask {
18-
VStack(spacing: .zero) {
19-
20-
if let top {
21-
// Top Fade
22-
LinearGradient(colors: [Color.black.opacity(0), Color.black], startPoint: .top, endPoint: .bottom)
23-
.frame(height: top)
24-
}
25-
26-
// Middle
27-
Rectangle()
28-
.fill(Color.black)
29-
.ignoresSafeArea()
30-
31-
if let bottom {
32-
// Bottom Fade
33-
LinearGradient(colors: [Color.black, Color.black.opacity(0)], startPoint: .top, endPoint: .bottom)
34-
.frame(height: bottom)
35-
}
36-
}
45+
.mask {
46+
VStack(spacing: .zero) {
47+
48+
// Top Fade
49+
if let top {
50+
LinearGradient(colors: [Color.black.opacity(0), Color.black], startPoint: .top, endPoint: .bottom)
51+
.frame(height: top)
52+
}
53+
54+
// Middle
55+
Rectangle()
56+
.fill(Color.black)
57+
.ignoresSafeArea()
58+
59+
// Bottom Fade
60+
if let bottom {
61+
LinearGradient(colors: [Color.black, Color.black.opacity(0)], startPoint: .top, endPoint: .bottom)
62+
.frame(height: bottom)
63+
}
64+
}
65+
.mask {
66+
HStack(spacing: .zero) {
67+
68+
// Top Fade
69+
if let leading {
70+
LinearGradient(colors: [Color.black.opacity(0), Color.black], startPoint: .leading, endPoint: .trailing)
71+
.frame(width: leading)
72+
}
73+
74+
// Middle
75+
Rectangle()
76+
.fill(Color.black)
77+
.ignoresSafeArea()
78+
79+
// Bottom Fade
80+
if let trailing {
81+
LinearGradient(colors: [Color.black, Color.black.opacity(0)], startPoint: .leading, endPoint: .trailing)
82+
.frame(width: trailing)
83+
}
84+
}
85+
}
3786
}
3887
}
3988
}

0 commit comments

Comments
 (0)