一直在尝试找到一种解决方案来动态检测背景颜色/要修改的视图下方的颜色,因为我可能希望在图像上有可读的文本,而不需要使用图像的平均颜色来确定正确的颜色对于文本,因为某些图像在图像中的某些位置可能有更多的浅色,反之亦然,对于深色,所以有没有办法获取某个坐标处的颜色,然后用它来确定文本颜色应该是什么,尝试过使用 Grok 等生成一个基础到目前为止,但 GeomertyReader 中没有 Color 函数,因为它希望我使用 Grok 的响应。
struct BackgroundColorKey: PreferenceKey {
static var defaultValue: Color? = nil
static func reduce(value: inout Color?, nextValue: () -> Color?) {
value = nextValue()
}
}
struct BackgroundColorReader: View {
var body: some View {
GeometryReader { geometry in
Color.clear
.preference(key: BackgroundColorKey.self, value: geometry.color(at: geometry.frame(in: .local).center))
}
}
}
struct DynamicTextColor: View {
@State private var backgroundColor: Color? = nil
var body: some View {
VStack {
Text("Your Text Here")
.foregroundColor(backgroundColor?.luminance < 0.5 ? .white : .black) // Invert based on luminance
.background(
BackgroundColorReader()
.onPreferenceChange(BackgroundColorKey.self) { newColor in
self.backgroundColor = newColor
}
)
}
}
}
这就是它生成的代码,如果其他人没有解决方案,也可以在网上无休止地查找,那么是否有一个框架或解决方案可以同时用于 macOS 和 iOS。
这是我试图在下面的 SwiftUI 中解决的一个示例
试试这个:
ZStack {
wallpaper
ZStack {
text.foregroundColor(.white)
.blendMode(.difference)
.overlay(text.blendMode(.hue))
.overlay(text.foregroundColor(.white).blendMode(.overlay))
.overlay(text.foregroundColor(.black).blendMode(.overlay))
}
}
代码取自:https://designcode.io/swiftui-handbook-multiple-blending-modes