gloss-ios/VisibilityTrackingModifier....

35 lines
996 B
Swift
Raw Normal View History

2023-03-11 20:31:48 -08:00
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
// Created by Sam Deane on 27/07/22.
// All code (c) 2022 - present day, Elegant Chaos Limited.
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
import SwiftUI
struct ContentVisibilityTrackingModifier<ID: Hashable>: ViewModifier {
@EnvironmentObject var visibilityTracker: VisibilityTracker<ID>
let id: ID
func body(content: Content) -> some View {
content
.id(id)
.background(
GeometryReader { proxy in
report(proxy: proxy)
}
)
}
func report(proxy: GeometryProxy) -> Color {
visibilityTracker.reportContentBounds(proxy.frame(in: .global), id: id)
return Color.clear
}
}
public extension View {
func trackVisibility<ID: Hashable>(id: ID) -> some View {
self
.modifier(ContentVisibilityTrackingModifier(id: id))
}
}