Swiftui 每隔几秒钟将borderStroke更改为随机颜色
我正在学习SwiftUI,并尝试设置我的圆圈的笔划边界,使其在数组中每隔2秒随机更改颜色。我尝试了randomElement(),因为在过去的示例中,我使用它来设置随机背景颜色。只是被卡住了,希望能得到指导Swiftui 每隔几秒钟将borderStroke更改为随机颜色,swiftui,Swiftui,我正在学习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, g
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))
}
}
}
}
您缺少onReceive的
代码,下面的代码应该可以正常工作。
您可能需要处理随机颜色逻辑,因为当前逻辑可能会多次给出相同的数字,因为您只有三种颜色
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))
}
}
}
}
收到!谢谢你,哈沙尔!