Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SwiftUI中使用径向渐变填充路径_Swift_Swiftui - Fatal编程技术网

如何在SwiftUI中使用径向渐变填充路径

如何在SwiftUI中使用径向渐变填充路径,swift,swiftui,Swift,Swiftui,我试图用径向渐变填充路径,但不管我怎么做,它总是以一种纯色结束(如下图所示)。它应该从红色变为蓝色 如何在SwiftUI中使用径向渐变填充路径?我做错了什么 谢谢大家! 事实证明,UnitPoint的x和y是介于0和1之间的值。一些简单的数学解决了这个问题 这项工作: struct ContentView: View { private let x: Double = 200.0 private let y: Double = 200.0 private let ra

我试图用径向渐变填充路径,但不管我怎么做,它总是以一种纯色结束(如下图所示)。它应该从红色变为蓝色

如何在SwiftUI中使用径向渐变填充路径?我做错了什么

谢谢大家!


事实证明,
UnitPoint
x
y
是介于0和1之间的值。一些简单的数学解决了这个问题

这项工作:

struct ContentView: View {
    private let x: Double = 200.0
    private let y: Double = 200.0
    private let radius: CGFloat = 100.0
    
    var body: some View {
        GeometryReader { geo in
            Rectangle()
                .foregroundColor(Color.black)
            Path { path in
                path.addArc(center: CGPoint(x: self.x, y: self.y), radius: self.radius, startAngle: .degrees(0), endAngle: .degrees(360), clockwise: true)
            }
               .fill(RadialGradient(
                   gradient: Gradient(colors: [.red, .blue]),
                   center: UnitPoint(
                    x: CGFloat(self.x / Double(geo.size.width)),
                    y: CGFloat(self.y / Double(geo.size.height))
                   ),
                   startRadius: self.radius * 0.30,
                   endRadius: self.radius
               ))
            
        }
    }
}

尝试<代码>中心:中心 @ KoeN,它看起来好像在屏幕中间的渐变中心。我需要的是梯度在圆的中心。啊,是的。现在不在Mac上,因此无法测试它。
struct ContentView: View {
    private let x: Double = 200.0
    private let y: Double = 200.0
    private let radius: CGFloat = 100.0
    
    var body: some View {
        GeometryReader { geo in
            Rectangle()
                .foregroundColor(Color.black)
            Path { path in
                path.addArc(center: CGPoint(x: self.x, y: self.y), radius: self.radius, startAngle: .degrees(0), endAngle: .degrees(360), clockwise: true)
            }
               .fill(RadialGradient(
                   gradient: Gradient(colors: [.red, .blue]),
                   center: UnitPoint(
                    x: CGFloat(self.x / Double(geo.size.width)),
                    y: CGFloat(self.y / Double(geo.size.height))
                   ),
                   startRadius: self.radius * 0.30,
                   endRadius: self.radius
               ))
            
        }
    }
}