Измените borderStroke на случайный цвет каждые несколько секунд - PullRequest
0 голосов
/ 08 февраля 2020

Я изучаю SwiftUI и пытаюсь установить штриховку моего круга, чтобы случайным образом менять цвет каждые 2 секунды из массива. Я пробовал randomElement (), поскольку именно это я использовал для установки случайного цвета фона в предыдущих примерах. Просто застрял и был бы признателен, как к нему подойти.

import SwiftUI
import Combine

let redBorder = Color(red: 255/255, green: 0/255, blue: 0/255, opacity: 1)
let orangeBorder = Color(red: 255/255, green: 127/255, blue: 0/255, opacity: 1)
let yellowBorder = Color(red: 255/255, green: 222/255, blue: 0/255, opacity: 1)

let randomBorderColors = [redBorder, orangeBorder, yellowBorder]

struct ContentView: View {
    @State var borderColor = redBorder

    let numTimer = Timer.publish(every: 2.0, on: .main, in: .common).autoconnect()

    var body: some View {

        GeometryReader{g in
            ZStack {
                //set strokeBorder to random color from array
                Circle().strokeBorder(Color.red, lineWidth: 30)
                Text("Hello World")
                .font(.system(size: g.size.height > g.size.width ? g.size.width * 0.4: g.size.height * 0.4))
            }
        }


    }
}

1 Ответ

0 голосов
/ 08 февраля 2020

Вы пропустили код для onReceive, следующие должны работать отлично. Возможно, вам придется поработать со случайной цветовой логикой c, поскольку текущая может давать одно и то же число несколько раз, поскольку у вас есть только три цвета.

import SwiftUI
import Combine

let redBorder = Color(red: 255/255, green: 0/255, blue: 0/255, opacity: 1)
let orangeBorder = Color(red: 255/255, green: 127/255, blue: 0/255, opacity: 1)
let yellowBorder = Color(red: 255/255, green: 222/255, blue: 0/255, opacity: 1)

let randomBorderColors = [redBorder, orangeBorder, yellowBorder]

struct ContentView: View {

    @State var borderColor = redBorder

    let numTimer = Timer.publish(every: 2.0, on: .main, in: .common).autoconnect()

    var body: some View {
        GeometryReader{ g in
            ZStack {
                //set strokeBorder to random color from array
                Circle()
                    .strokeBorder(self.borderColor, lineWidth: 30)
                    .onReceive(self.numTimer, perform: { _ in
                        self.borderColor = randomBorderColors.randomElement() ?? redBorder
                        print(self.borderColor)
                    })
                Text("Hello World")
                .font(.system(size: g.size.height > g.size.width ? g.size.width * 0.4: g.size.height * 0.4))
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...