Skip to content

Commit 4b09112

Browse files
committed
fix background display bug in stack mode
change view configuration demo
1 parent 9843019 commit 4b09112

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed

Demo/Shared/Demos/ViewConfigurationDemo.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ struct ViewConfigurationDemo_Previews: PreviewProvider {
5959
}
6060

6161
struct ViewConfigurationDemoContainerConfiguration: ContainerConfigurationProtocol {
62-
var queueType: ContainerViewQueueType = .oneByOne
62+
var queueType: ContainerViewQueueType = .multiple
6363
var displayType: ContainerViewDisplayType = .stacking
6464

6565
var insets: EdgeInsets {
6666
.init(top: 30, leading: 30, bottom: 30, trailing: 30)
6767
}
68+
69+
var displayOrder: ContainerDisplayOrder = .descending
6870
}
6971

7072
extension ContainerConfigurationProtocol where Self == ViewConfigurationDemoContainerConfiguration {
@@ -74,23 +76,23 @@ extension ContainerConfigurationProtocol where Self == ViewConfigurationDemoCont
7476
}
7577

7678
class ViewConfigurationDemoContainerViewConfiguration: ContainerViewConfigurationProtocol {
77-
var alignment: Alignment? {
79+
var alignment: Alignment? = {
7880
[.leading, .topLeading, .bottomLeading, .center, .bottom, .topTrailing, .bottomTrailing, .top, .trailing].randomElement()
79-
}
81+
}()
8082

81-
var shadowStyle: ContainerViewShadowStyle? {
83+
var shadowStyle: ContainerViewShadowStyle? = {
8284
let color: Color = [.blue, .green, .brown, .black].randomElement() ?? .red
8385
let x = CGFloat.random(in: -5...5)
8486
let y = CGFloat.random(in: -5...5)
8587
let radius = CGFloat.random(in: 5...14)
8688
return [.radius(radius), .disable, .custom(color, 10, x, y)].randomElement()
87-
}
89+
}()
8890

8991
var dismissGesture: ContainerViewDismissGesture? {
9092
.tap
9193
}
9294

93-
var transition: AnyTransition? {
95+
var transition: AnyTransition? = {
9496
let t1: AnyTransition = .opacity
9597
let t2: AnyTransition = .move(edge: .trailing).combined(with: .opacity)
9698
let t3: AnyTransition = .slide.combined(with: .opacity)
@@ -99,16 +101,14 @@ class ViewConfigurationDemoContainerViewConfiguration: ContainerViewConfiguratio
99101
let t6: AnyTransition = .asymmetric(insertion: t4, removal: t1)
100102
let t7: AnyTransition = .asymmetric(insertion: t2, removal: t4)
101103
return [t1, t2, t3, t4, t5, t6, t7].randomElement()
102-
}
104+
}()
103105

104-
var autoDismiss: ContainerViewAutoDismiss? {
105-
.seconds(2)
106-
}
106+
var autoDismiss: ContainerViewAutoDismiss? = .seconds(2)
107107

108-
var animation: Animation? {
108+
var animation: Animation? = {
109109
let speed = Double.random(in: 0.3...1.5)
110110
return [.easeIn, .easeInOut, .linear, .spring().speed(speed), .interactiveSpring()].randomElement()
111-
}
111+
}()
112112
}
113113

114114
extension ContainerViewConfigurationProtocol where Self == ViewConfigurationDemoContainerViewConfiguration {

Sources/SwiftUIOverlayContainer/Container/CompositeContainerView.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,12 @@ extension OverlayContainer {
173173
containerViewDisplayType: containerConfiguration.displayType
174174
)
175175
// the current context of view is ZStack (GenericStack)
176-
backgroundOfIdentifiableView
177-
.zIndex(1.0)
178-
compositingView
179-
.padding(containerConfiguration.insets) // add insets for each view
180-
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: alignment)
181-
.zIndex(2.0)
176+
backgroundOfIdentifiableView
177+
.zIndex(timeStamp: identifiableView.timeStamp, order: containerConfiguration.displayOrder, background: true)
178+
compositingView
179+
.padding(containerConfiguration.insets) // add insets for each view
180+
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: alignment)
181+
.zIndex(timeStamp: identifiableView.timeStamp, order: containerConfiguration.displayOrder, background: false)
182182
}
183183
}
184184
}

Sources/SwiftUIOverlayContainer/Extensions/SwiftUI.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,16 @@ extension View {
134134
}
135135
return zIndex(index)
136136
}
137+
138+
/// set zIndex for stack mode
139+
func zIndex(timeStamp: Date, order: ContainerDisplayOrder, background: Bool) -> some View {
140+
var index = timeStamp.timeIntervalSince1970
141+
if case .descending = order {
142+
index = Date.distantFuture.timeIntervalSince1970 - index
143+
}
144+
if background {
145+
index -= 0.0001
146+
}
147+
return zIndex(index)
148+
}
137149
}

0 commit comments

Comments
 (0)