@@ -2,38 +2,87 @@ import SwiftUI
22
33extension 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