Цвет в темном режиме не так, как ожидалось - PullRequest
0 голосов
/ 28 февраля 2020

Я хочу создать 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()
    }
}

enter image description here

...