Рисование концентратов c кругов в Swift разными цветами с помощью цикла ForEach - PullRequest
0 голосов
/ 28 апреля 2020

Я использую SwiftUI, и я хочу использовать ForEach l oop, что dr aws концентри c кругов, который регулирует, какой круг выделен Slider. Когда я запускаю следующий код, я получаю один кружок красного цвета, когда второй кружок должен быть синим, потому что Stepper равен 2,0. Как я могу обновить цвет представления на основе значения ползунка. Я еще не удосужился добавить ползунок, потому что хотел, чтобы сначала работало постоянное значение. Кто-нибудь знает, как эти концентрические c кружки накладываются друг на друга, причем один из них имеет цвет, отличный от остальных, в зависимости от значения переменной?

import SwiftUI

struct CircleView: View {
    @State var color = Color.red
    @State var stepperSelector = 2.0
    var body: some View {
        ZStack {
            ForEach((0...5), id: \.self) { x in
                Path { path in
                    var center = (x: 187, y:240)
                    var radius = Double(185) - Double(x) * Double(185 / 7)
                    let factor = Double(Int(radius)) / 5
                    path.move(to: CGPoint(x: center.x + Int(radius), y: center.y))
                        for i in stride(from: 0, to: 361, by: 1){

                            let center = CGPoint(x: 187, y: 240)
                            let i = Double(i)
                            let radians = i * Double.pi / 180
                            let x = radius * cos(radians) + Double(center.x)
                            let y = radius * sin(radians) + Double(center.y)
                            path.addLine(to: CGPoint(x: x, y: y))
                        }
                }
                .fill(self.color)
                .onAppear{
                    if Int(self.stepperSelector) == Int(x) {
                        self.color = Color.blue
                    } else {
                        self.color = Color.red
                    }
                }
            }
        }
    }
}

struct CircleView_Previews: PreviewProvider {
    static var previews: some View {
        CircleView()
    }
}

1 Ответ

0 голосов
/ 28 апреля 2020

.fill заполнит внутреннюю часть пути, поэтому выводит один красный цветовой круг. Кроме того, вы можете переключить цвет в строке без использования отдельного состояния var.

struct CircleView: View {

    @State var stepperSelector = 2.0

    var body: some View {
        ZStack {
            ForEach((0...5), id: \.self) { x in
                Path { path in
                    let center = (x: 187, y: 240)
                    let radius = Double(185) - Double(x) * Double(185 / 7)

                    path.move(to: CGPoint(x: center.x + Int(radius), y: center.y))

                    for i in stride(from: 0, to: 361, by: 1){

                        let center = CGPoint(x: 187, y: 240)
                        let i = Double(i)
                        let radians = i * Double.pi / 180

                        let x = radius * cos(radians) + Double(center.x)
                        let y = radius * sin(radians) + Double(center.y)

                        path.addLine(to: CGPoint(x: x, y: y))

                    }
                }
                .stroke(Int(self.stepperSelector) == Int(x) ? Color.blue : Color.red)
            }
        }
    }
}

Выход enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...