Я хочу создать Shape, который реагирует на Darkmode, поэтому цвет должен быть белым в darkmode и черным в обычном режиме.
Это мой код: (копируемый и запускаемый)
Результат -> см. Рисунок.
Я надеялся, что, если я установлю цвет обводки в UIColor.label.cgColor, он примет «правильный» цвет, но это не так. Что я делаю не так?
import SwiftUI
import UIKit
@available(iOS 13.0, *)
public struct DarkView<Content> : View where Content : View {
var darkContent: Content
var on: Bool
public init(_ on: Bool, @ViewBuilder content: () -> Content) {
self.darkContent = content()
self.on = on
}
public var body: some View {
ZStack {
if on {
Spacer()
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.background(Color.black)
.edgesIgnoringSafeArea(.all)
darkContent.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity).background(Color.black).colorScheme(.dark)
} else {
darkContent
}
}
}
}
@available(iOS 13.0, *)
extension View {
public func darkModeFix(_ on: Bool = true) -> DarkView<Self> {
DarkView(on) {
self
}
}
}
class ShapeView : UIView {
let shapeLayer = CAShapeLayer()
init() {
super.init(frame: CGRect.zero)
shapeLayer.strokeColor = UIColor.label.cgColor
shapeLayer.path = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: 100, startAngle: 0, endAngle: CGFloat(Double.pi), clockwise: true).cgPath
self.layer.addSublayer(shapeLayer)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
@available(iOS 13.0, *)
struct ShapeWrapper: UIViewRepresentable {
func makeUIView(context: UIViewRepresentableContext<ShapeWrapper>) -> ShapeView {
let view = ShapeView()
return view
}
func updateUIView(_ uiView: ShapeView, context:
UIViewRepresentableContext<ShapeWrapper>) {
}
}
struct ContentView: View {
var body: some View {
VStack {
Text("Hello, World!")
ShapeWrapper()
.fixedSize()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct ContentViewDarkmode_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.colorScheme, .dark)
.darkModeFix()
}
}