Commit
This commit is contained in:
33
Sources/PediFoods/Views/Main/HomeScrollOffsetObserver.swift
Normal file
33
Sources/PediFoods/Views/Main/HomeScrollOffsetObserver.swift
Normal file
@@ -0,0 +1,33 @@
|
||||
import SwiftUI
|
||||
|
||||
enum HomeScrollCoordinateSpace {
|
||||
static let name = "home-scroll"
|
||||
}
|
||||
|
||||
struct HomeScrollOffsetPreferenceKey: PreferenceKey {
|
||||
static let defaultValue: CGFloat = 0
|
||||
|
||||
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
|
||||
value = nextValue()
|
||||
}
|
||||
}
|
||||
|
||||
struct ScrollOffsetObserver: View {
|
||||
let onOffsetChange: (CGFloat) -> Void
|
||||
|
||||
var body: some View {
|
||||
Color.clear
|
||||
.frame(height: 0)
|
||||
.background(
|
||||
GeometryReader { geometry in
|
||||
Color.clear.preference(
|
||||
key: HomeScrollOffsetPreferenceKey.self,
|
||||
value: geometry.frame(in: .named(HomeScrollCoordinateSpace.name)).minY
|
||||
)
|
||||
}
|
||||
)
|
||||
.onPreferenceChange(HomeScrollOffsetPreferenceKey.self) { minY in
|
||||
onOffsetChange(-minY)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user